1. wiki
json 库实现序列化和反序列化
2. 使用
2.1. 序列化
2.1.1. dump
1 | json.dump(obj, fp, *, |
参数含义
obj
: 表示是要序列化的对象fp
: 文件描述符,将序列化的 str 保存到文件中。其是需要支持.write()
的类文件对象skipkeys
: 默认为 False ,如果为 True,那么那些不是基本对象(包括 str, int、float、bool、None)的字典的键会被跳过;否则引发一个 TypeError。ensure_ascii
: 默认值为 True,能将所有传入的非 ASCII 字符转义输出。否则这些字符将按原样输出check_circular
: 默认值为 True,如果为 False,那么容器类型的循环引用检验会被跳过并且循环引用会引发一个 OverflowErrorallow_nan
: 默认值为 True,如果为 False,那么在对严格 JSON 规格范围外的 float 类型值(nan、inf 和 -inf)进行序列化时会引发一个 ValueError。如果 allow_nan 是 true,则使用它们的 JavaScript 等价形式(NaN、Infinity 和 -Infinity)。indent
: 设置缩进格式,美化输出,默认值为 None。- 值为 None ,选择最紧凑的表示
- 值为一个正整数,会让每一层缩进同样数量的空格
- 值为一个字符串 (比如 “\t”),那个字符串会被用于缩进每一层
- 值为为零、负数或者 “”,则只会添加换行符
separators
: 去除分隔符后面的空格,默认值为 None。如果指定,则分隔符应为(item_separator,key_separator)
元组。当indent
为 None 时,默认值取(', ', ': ')
,否则取(',', ': ')
。为了得到最紧凑的 JSON 表达式,你应该指定其为(',', ':')
以消除空白字符。default
: 默认值为 None,如果指定,其为一个函数,每当某个对象无法被序列化时它会被调用。它应返回对象的 JSON 可编码版本或引发 TypeError。如果未指定,则引发 TypeErrorsort_keys
: 默认值为 False,如果为True,则字典的输出将按键值排序cls
: 为了使用一个自定义的 JSONEncoder 子类(比如:覆盖了 default() 方法来序列化额外的类型),通过该关键字参数来指定,否则将使用 JSONEncoder
2.1.2. dumps
dumps
函数不需要传文件描述符,其他的参数和 dump
函数的一样
2.2. 反序列化
2.2.1. load
1 | json.load(fp, *, |
参数含义
fp
: 文件描述符,将一个支持.read()
并包含一个 JSON 文档的 text file 或者 binary file,反序列化为一个 Python 对象object_hook
: 默认值为 None,其是一个可选函数,此功能可用于实现自定义解码器。指定一个函数,该函数负责把反序列化后的基本类型对象转换成自定义类型的对象parse_float
: 默认值为 None,如果指定了,用来对 JSON float 字符串进行解码,这可用于为 JSON 浮点数使用另一种数据类型或解析器。默认状态下,相当于float(num_str)
parse_int
: 默认值为 None,如果指定了,用来对 JSON int 字符串进行解码,这可用于为 JSON 整数使用另一种数据类型或解析器。默认状态下,相当于int(num_str)
parse_constant
: 默认值为 None,如果指定了,将要与以下字符串中的一个一同调用:'-Infinity','Infinity','NaN'
。如果遇到了无效的 JSON 符号,会引发异常。object_pairs_hook
: 默认值为 None,其是一个可选函数,用于实现自定义解码器,优先级比object_hook
高
2.2.2. loads
loads
函数不需要传文件描述符,取而代之的是一个字符串的传入,其他参数的含义和 load
函数的一致,增加了需要字符集参数
s
: 将 s(包含 JSON 文档的 str,bytes 或 bytearray 实例)反序列化为 Python 对象encoding
: 指定编码格式,默认值为 None
3. 举例
1 | import json |