1 概述
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
json是最常用的数据交换格式,在python编码中需要将json字符串加载为python可以识别的python对象。
通常数据之间的传输、存储是json字符串的形式;而数据的操作、分析则是对python对象进行操作。
json字符串和python对象可以通过一下两个函数互相转换
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
json 类型转换到 python 的类型对照表
JSON | Python |
---|---|
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
2 详解
2.1 json.dumps
格式
编码后的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)
参数解释
参照:https://blog.csdn.net/liangxy2014/article/details/78985057
skipkeys:在encoding过程中,dict对象的key只可以是string对象,如果是其他类型,那么在编码过程中就会抛出ValueError的异常。skipkeys可以跳过那些非string对象当作key的处理.
ensure_ascii:输出真正的中文需要指定ensure_ascii=False
check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误
allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。
indent:根据数据格式缩进显示,读起来更加清晰, indent的值,代表缩进空格式:
separators:作用是去掉‘,’ ‘:’后面的空格,在传输数据的过程中,越精简越好,冗余的东西全部去掉。
encoding:编码方式
defaul:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。
sort_keys:告诉编码器按照字典key排序(a到z)输出
使用方法
#将dict编码为 JSON 格式数据
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
data2 = json.dumps(data)
print(data2)
json.load
格式
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
参数解释
参照:https://blog.csdn.net/daerzei/article/details/100598901
encoding:编码方式
object_pairs_hook:它会将结果以key-value有序列表的形式返回
object_hook:它会将(loads的)返回结果字典替换为你所指定的类型,这个功能可以用来实现自定义解码器,
parse_float:它如果被指定的话,在解码json字符串的时候,符合float类型的字符串将被转为你所指定的
parse_int:它如果被指定的话,在解码json字符串的时候,符合int类型的字符串将被转为你所指定的
parse_constant:它如果被指定的话,在解码json字符串的时候,如果出现以以下字符串:-Infinity,Infinity,NaN那么指定的parse_constant方法将会被调用到
使用方法
#Python 解码 JSON 对象:
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print(text)