【Python】JSON模块的使用

2023-10-30

JSON的基本使用

1.内置库,不需要额外安装

json模块是python内置的库,不需要额外安装就可以导入运行。
在这里插入图片描述
json模块的主要功能是将序列化数据从文件里读取出来或者存入文件。

四个函数

json模块的操作使用相对较为简单,该模块只有四个方法dump()load()dumps()loads()

函数 功能
json.dumps() 将python对象编码成Json字符串,还需要使用文件操作,写入文件
json.loads() 将Json字符串解码成python对象,需要先打开文件
json.dump() 将python中的对象转化成json并且储存到文件中
json.load() 将文件中的json的格式转化成python对象提取出来

四个函数的范例

import json
'''测试用dict字典'''
data_dict = {  "strength": "10",
                "knowledge": "12",
                "speed": "6",
                "member":['蛋','糖','杏仁','马卡龙']}

def json_dumps_test():
    print('dumps测试运行中')
    json_str = json.dumps(data_dict,ensure_ascii=False)
    print(json_str)
    with open('./json_test.json','w',encoding='utf-8') as file:
        file.write(json_str)

def json_dump_test():
    print('dump测试运行中')
    with open('./json_test.json','w',encoding='utf-8') as file:
        json.dump(data_dict,file,ensure_ascii=False)

def json_loads_test():
    print('loads测试运行中')
    with open('./json_test.json','r',encoding='utf-8') as file:
        dict = file.read()
        print(type(dict))
        print(dict)#str类型
        dict = json.loads(dict)
        print(type(dict))
        print(dict)#dict类型
            
def json_load_test():
    print('load测试运行中')
    with open('./json_test.json','r',encoding='utf-8') as file:
        dict = json.load(file)
        print(type(dict))
        print(dict)#dict类型

if __name__ == '__main__':
    #json_dumps_test()
    #json_dump_test()
    #json_loads_test()
    #json_load_test()
    pass

json.dumps(参数:字典等需要保存的数据类型) -> str

1.open 一个文件获得file文件流
2.使用json.dumps (data_dict)将数据转为符合json规则的字符串
3.写入文件

对数据进行编码,形成json格式的字符串,再写入文件

范例

import json

if __name__ == '__main__':
    data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
    #    默认转换的json数据是无序的。如果将参数sort_keys改为True,
    #    则会根据key值将数据进行排序。
    json1 = json.dumps(data_dict, sort_keys=True)
    # 默认无序
    json2 = json.dumps(data_dict)
    print(json1)
    print(json2)
    # 输出{"key1": "value", "key2": "value2", "key3": "value3"}
    # 输出{"key2": "value2", "key1": "value", "key3": "value3"}

但是还要将其写入文件

# 打开文件   在文件里写入转成的json串
with open('test.json', 'w', encoding='utf-8') as f:  
	f.write(json1)  

在这里插入图片描述

dumps的一些参数(写在这里用作查询),dump类似

因为dumps编码以后的json格式输出比较的紧凑,如果不止一行看起来就不是特别好看,就像一堆乱码似的。所以,就推出了一些可选参数来让json码的可读性更高。当然,不用也没问题。
函数:

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

obj:要转化成json的对象字典,列表,字符等
sort_keys =True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序。
以下是写入到文件后的形式。

{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"age": 19, "city": "\u56db\u5ddd", "name": "\u4f60\u731c"}

indent:参数根据数据格式缩进显示,读起来更加清晰。

{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
  "name": "\u4f60\u731c",
  "age": 19,
  "city": "\u56db\u5ddd"
}

separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了。

{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"name":"\u4f60\u731c","age":19,"city":"\u56db\u5ddd"}

skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key

ERROR: keys must be str, int, float, bool or None, not tuple

'[{"name": "\\u4f60\\u731c", "age": 19, "city": "\\u56db\\u5ddd"}]'

ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。

{"name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{"name": "你猜", "age": 19, "city": "四川"}

check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。

allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。

default:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。

json.dump(data_dict需要保存的数据类型,file文件流类型) 两个主要参数

1.open 一个文件获得file文件流
2.使用json.dump (data_dict,file)将数据写入json文件
这个方法结合了文件的操作,把转换后的json储存在了文件里。

函数原型

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

范例

import json
data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
#讲python编码成json放在那个文件里
filename = 'data.json'#'pi_x.txt'txt也可以
with open (filename,'w') as f:
    json.dump(x,f)

或者

import json
data_dict = {"key2": "value2", "key1": "value", "key3": "value3"}
json.dump(data_dict, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))

参数与dumps基本一致,就是多了一个fp,用来直接操作文件。

json.loads (str)

1.open 一个文件获得file文件流
2.读取文件内容为字符串
3.使用json.loads (str)将字符串转换成对应的数据格式
函数原型

def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``s`` (a ``str`` instance containing a JSON
    document) to a Python object.""

范例

import json

f = open('data.json', encoding='utf-8')
content = f.read()  # 使用loads()方法需要先读文件
python_obj = json.loads(content)
print(python_obj)

json.load(file)

1.open 一个文件获得file文件流
2.使用json.load (file)转换成对应的数据格式

函数原型

def load(fp, cls=None, object_hook=None, parse_float=None,
        parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
    """Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
    a JSON document) to a Python object."""

范例

import json

python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))

json的数据类型和python数据类型的对应

Python Json
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】JSON模块的使用 的相关文章

随机推荐

  • DOPI 海思入门级开发板Hi3516EV200 开发板

    自我介绍 大家好 我是DOPI 音译 独派 中文名 行动派 叫我 独派 行动派都可以 很长一段时间里 海思的芯片 都只出现在大厂的产品里 很少出现在开源的项目中 经过DOPI的努力 现在海思的芯片 也可以开源 可以可以用在智能家电 智能门锁
  • SpringBoot 读取配置文件的值为 Infinity

    1 配置信息 appid 6E212341234 2 获取方式 Value admin private String admin 获取到结果 Infinity 3 修改方案 配置信息上加 号 appid 6E212341234 yml中使用
  • 国内远程控制市场竞争激烈 TeamViewer一马当先

    近年来 疫情的反复给很多行业带来了负面影响 但是远程控制软件却因为远程办公的流行而备受众多企业的青睐 远程控制2022年市场也将高达30亿元 在此大好形势下 多款远程控制软件纷纷争夺国内市场 其中表现非常出色的当属TeamViewer 据埃
  • 卷(三)C++___二刷

    Chapter 13 Basic Object oriented Programming 13 1 Welcome to object oriented programming Object oriented programming OOP
  • 您不是订单管理的定向开发者_全面升级投放和营销能力 华为应用市场商业推广助力开发者高效增长...

    9月10日 2020华为开发者大会在东莞松山湖盛大开幕 9月11日下午 在 共舟前行 创新未来 华为应用市场商业推广分论坛上 华为应用市场商业推广产品部部长与现场开发者及合作伙伴分享过去半年取得的成绩 并共同探讨了合作伙伴如何加速获量成长以
  • DNS部署与安全

    1 DNS Domain Name Service 域名服务 作用 为客户机提供域名解析服务器 2 域名组成 2 1 域名组成概述 如 www sina com cn 是一个域名 从严格意义讲 sina com cn 才被称为域名 全球唯一
  • GBDT 梯度提升树(Gradient Boosting Decision Tree)(万字全解)

    目录 一 相关基础知识 二 调用sklearn实现GBDT 1 梯度提升回归树 2 梯度提升分类树 三 参数 属性详解 1 迭代过程涉及的参数 1 n estimators 迭代次数 2 learning rate 学习率参数 3 init
  • Simon Video Course Task 2

    Lesson 01 The tasks This an IELTS training course training has five steps Understand the task what we need to do Break t
  • python硬币识别_OpenCV硬币检测和自动结果检查

    我正在做一个硬币识别项目 我遇到的第一件事就是从图像中正确提取硬币 即使是从非常简单的图像中 有很多很好的硬币检测工作方法 但我认为所有这些都需要人工检查后应用 我测试了其中两种 HoughCircles和threshold及其后的find
  • 智能交通系统调研

    背景 随着微电子技术系统 MEMS 和低功耗的信息交互技术的快速发展 如今已经能够部署大规模无线传感器网络 无线传感器网络是在需要被监视的地点附近或是内部随机地 密集地部署大量的无线传感器结点 传感器网络的应用是多种多样的 不同于传统的无线
  • linux怎么将命令变成汉语,在Linux系统中把firefox火狐游览器转成中文语言的两种方法...

    如果你的Linux操作系统中firefox火狐游览器不是中文语言 你现在要把它们改成中文语言 有两种方法可以实现 其中第二种方法适合所有的Linux发行版 第一种方法 采用系统命令处理 如果所用的Linux系统是Ubuntu Deepin等
  • 什么是原型、原型链?原型和原型链的作用(有图方便理解)

    原型 JS声明构造函数 用来实例化对象的函数 时 会在内存中创建一个对应的对象 这个对象就是原函数的原型 构造函数默认有一个prototype属性 prototype的值指向函数的原型 同时原型中也有一个constructor属性 cons
  • Python数值分析(杜普伊特-福希海默方法)一维固定透射率河流畜水层

    杜普伊特 福希海默方法 所有地下水流量都是三维的 但出于建模目的 流量可以近似为一维或二维 在区域尺度上 与面积相比 大多数含水层相对较薄 因此被称为浅层含水层 在这样的含水层中 流动主要是水平的 并且可以近似为水平面上的二维 水平流量由流
  • 【C语言】结构体的大小是如何计算的?(结构体对齐)

    目录 一 使用sizeof计算结构体的大小 二 影响结构体大小的因素 1 结构体成员的类型 2 结构体成员的对齐方式 3 结构体成员的顺序 三 利用结构体对齐规律计算结构体大小 1 结构体的对齐规则 2 结构体对齐的原因 1 gt 平台原因
  • 使用元学习来进行少样本图像分类

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 作者 Etienne 编译 ronghuaiyang 导读 你并不总是有足够的图像来训练一个深度神经网络 下面是教你如何通过几个样本让模型快速学习的方法 你并不总是有足够的图像来训练一
  • Mac实践--MAC搭建FTP服务器

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Mac os 搭建FTP SFTP服务器 由于mac拥有自带的FTP工具 因此其实不需要借助其他工具 搭建更加方便 如果你访问过较新版本的Mac OS X中的 共享首选项
  • rockchip-rockxxdemo编译说明

    bin bash ARM编译器路径 20210708 1 修改为安装好路径 2 也可以修改为rv1126本身安装的编译器路径 GCC COMPILER PATH opts gcc arm 8 3 2019 03 x86 64 arm lin
  • Java Map和Set

    1 Map Map是一个接口 该类没有继承自Collection 该类中存储的是
  • 【OSS】阿里云对象存储OSS入门使用 JAVA SDK上传与下载 简单测试案例

    本文包括阿里云对象存储OSS入门使用 上传与下载以及简单测试案例的实现 首先 在阿里云中找到对象存储OSS 点击侧边栏的Bucket列表 创建Bucket列表 根据需求选择配置 创建完成后 点击进入查看概览 找到对应的Endpoint 在后
  • 【Python】JSON模块的使用

    JSON的基本使用 1 内置库 不需要额外安装 json模块是python内置的库 不需要额外安装就可以导入运行 json模块的主要功能是将序列化数据从文件里读取出来或者存入文件 四个函数 json模块的操作使用相对较为简单 该模块只有四个