一. 简介
JSON在python中分别由list和dict组成。
这是用于序列化的两个模块:
- json: 用于字符串和python数据类型间进行转换
- pickle: 用于python特有的类型和python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中 loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型
json是可以在不同语言之间交换数据的,而pickle只在python之间使用。json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。
1、python原始类型向json类型转换
python | json |
dict | object |
list,tuple | array |
str,unicode | string |
int,long,float | number |
True | true |
False | false |
None | null |
2、json类型转换到python类型
json | python |
boject | dict |
string | unicode |
number(int) | int,long |
number(real) | float |
true | True |
false | False |
null | None |
json函数
函数 | 作用 |
json.dump | 将dict转换为str写入文件 |
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.load | 将json文件读出到内存,并转换为python的标准词典类型 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
二. 参数使用
josn.dumps()参数
参数 | 功能 |
data | 原始dict数据 |
skipkeys | 如果“skipkeys”为真,那么“dict”键的非基本类型(‘str’,‘int’,‘ float’,‘ bool’,‘None’)将被跳过,而不是引发“ TypeError ”。 |
ensure_ascii | 如果"ensure_ascii "为false,那么返回值可以包含非ascii字符(如果它们出现在"obj"中包含的字符串中)。否则,所有这些字符都在JSON字符串中转义。 |
check_circular | 如果"check_circular"为false,那么容器类型的循环引用检查将被跳过,循环引用将导致"OverflowError "(或者worse)。 |
allow_nan | 如果"allow_nan"为false,那么它将是一个"ValueError"’,用于序列化超出范围的’float ‘值(‘nan’,‘inf’,’-inf’),严格遵守JSON规范,而不是使用JavaScript等价的值(’ nan’, ’ Infinity’, ‘-Infinity’)。 |
indent | 如果" indent"是一个非负整数,那么JSON数组元素和对象成员将使用该缩进级别进行漂亮的打印。缩进级别0只会插入新行。‘None’是最紧凑的表达。 |
separators | separators分隔符,默认是(’,’, ‘:’),字典之间用“,”隔开,而key和value之间用“:”隔开 |
sort_keys | 如果"sort_keys"为真(默认值:" False"),那么字典的输出将按键排序。 |
2.1 ensure_ascii - ascii使能
f = open(self.path, 'w+', encoding='utf-8')
json.dump(self.data, f, ensure_ascii=False) #不使用ascii
》》
dehug.json
{"a": "123", "1": ["a", "2", 222], "ddd": {"d": 123}, "中文测试": "skdjhfnj", "ovnciosdv": 654446}
json.dump(self.data, f, ensure_ascii=True)
》》
debug.json
{"a": "123", "1": ["a", "2", 222], "ddd": {"d": 123}, "\u4e2d\u6587\u6d4b\u8bd5": "skdjhfnj", "ovnciosdv": 654446}
2.2 indent - 缩进
indent不传参 默认缩进为4;传参则根据传参而定
参考文档:
python读写json文件 - Bigberg - 博客园