JSON函数
使用JSON函数需要导入json库:import json
json.dump()
将序列化后的JSON字符串保存到文件
语法
json.dump(obj, fp, 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:将要被序列化的对象
- fp:打开的文件句柄
- skipkeys: 值为Ture时,如果字典的键不是基本类型(str,unicode,int,long,float,bool,None)会跳过去,处理后面的值。值为False,则会引发TypeError。
import json
di = {'a':1,'b':2,(1,2):3}
f = open('json.json', 'w')
json.dump(di, f, skipkeys=True)
json.json内容:
{"a": 1, "b": 2}
如果skipkeys为False
import json
di = {'a':1,'b':2,(1,2):3}
f = open('json.json', 'w')
json.dump(di, f, skipkeys=False)
TypeError: key (1, 2) is not a string
- ensure_ascii=True:默认为True。如果为True,非ascii字符转换为\uxxxx形式的unicode码值。如果为False,将以unicode编码写入文件,仍显示非ascii字符。
str = "中文"
f = open('json.json', 'w')
json.dump(str, f, ensure_ascii=True )json.json内容:
"\u4e2d\u6587"
str = "中文"
f = open('json.json', 'w')
json.dump(str, f, ensure_ascii=False )json.json内容:
"中文"
- check_circular=True:默认为True。如果为假,那么容器类型的循环引用检验会被跳过并且循环引用会引发一个 OverflowError (或者更糟的情况)。
- allow_nan=True:默认为True。如果为假,那么在对严格 JSON 规格范围外的 float 类型值(nan、inf 和 -inf)进行序列化时会引发一个 ValueError。如果 allow_nan 是 true,则使用它们的 JavaScript 等价形式(NaN、Infinity 和 -Infinity)。
- cls=None:
- indent=None:如果为0或负值,数组或对象元素将换行打印。如果为正值,将空设定的空格打印。默认为None,将连续打印。
obj = [1,2,3]
f = open('json.json', 'w')
json.dump(obj, f, indent=None )[1, 2, 3]
obj = [1,2,3]
f = open('json.json', 'w')
json.dump(obj, f, indent=3 )[1, 2, 3
]
- separators=None:是一个(item_separator, key_separator)元组,默认
(',', ':')
- encoding=“utf-8”:str的字符编码,默认UTF-8
- default=None:当 default 被指定时,其应该是一个函数,每当某个对象无法被序列化时它会被调用。它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个 TypeError。如果没有被指定,则会直接引发 TypeError。
- sort_keys=False:如果为True,那么字典的输出会以键的顺序排序。
json.dumps()
语法:
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)
将对象序列化为JSON格式的字符串。
import json
obj = [1,2,3]
with open('json.json', 'w') as f:f.write(json.dumps(obj, f, indent=3))
json.load()
语法:
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[,
parse_constant[, object_pairs_hook[, **kw]]]]]]]])
将json文件中序列化字符串转换为python对象。
- fp:文件句柄
- encoding:如果fp文件是ascii编码而不是utf-8编码,那么需要指定encoding。
- objec_hook:是一个可选的函数,它会被调用于每一个解码出的对象字面量(即一个 dict)。object_hook 的返回值会取代原本的 dict。这一特性能够被用于实现自定义解码器
- parse_float:如果指定,将与每个要解码 JSON 浮点数一同调用。默认状态下,相当于 float(num_str) 。可以用于对 JSON 浮点数使用其它数据类型和解析器 (比如 decimal.Decimal )
- parse_int:parse_int ,如果指定,将与每个要解码 JSON 整数的字符串一同调用。默认状态下,相当于 int(num_str) 。可以用于对 JSON 整数使用其它数据类型和语法分析程序 (比如 float )
- parse_constant:parse_constant ,如果指定,将要与以下字符串中的一个一同调用: ‘-Infinity’ , ‘Infinity’ , ‘NaN’ 。如果遇到无效的 JSON 数字它会被用于抛出异常。
json.loads()
JSON格式的字符串转换为python对象
语法
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[,
parse_constant[, object_pairs_hook[, **kw]]]]]]]])
连接
https://docs.python.org/zh-cn/2.7/library/json.html?highlight=json