00093-Python json --- JSON 编码和解码器-windows10
前言
JSON (JavaScript Object Notation),由 RFC 7159 (它取代了 RFC 4627) 和 ECMA-404 指定,是一个受 JavaScript 的对象字面值句法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的子集。
警告: 在解析来自不受信任恶劣的 JSON 数据时要小心谨慎。 恶意的 JSON 字符串可能导致解码器消耗大量 CPU 和内存资源。 建议对要解析的数据大小进行限制。
json 提供了与标准库 marshal 和 pickle 相似的API接口。
操作系统:Windows 10 专业版
参考文档
简洁使用
对基本的 Python 对象层次结构进行编码:
1 | import json |
紧凑编码:
1 | import json |
美化输出:
1 | import json |
JSON解码:
1 | import json |
特殊 JSON 对象解码:
1 | import json |
扩展 JSONEncoder:
1 | import json |
从命令行使用 json.tool
来验证并美化输出:
1 | echo '{"json":"obj"}' | python -m json.tool |
详细文档请参见 命令行界面。
备注: JSON 是 YAML 1.2 的一个子集。 由该模块的默认设置所产生的 JSON(尤其是默认的 separators 值)也是 YAML 1.0 和 1.1 的一个子集。 因此该模块也能被用作 YAML 序列化器。
备注: 这个模块的编码器和解码器默认保护输入和输出的顺序。仅当底层的容器未排序时才会失去顺序。
json.dump
def: 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)
使用这个 转换表 将 obj 序列化为 JSON 格式化流形式的 fp (支持 .write() 的 file-like object)。
json.dumps
def: json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
使用这个 转换表 将 obj 序列化为 JSON 格式的 str。 其参数的含义与 dump() 中的相同。
json.load
def: json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
使用这个 转换表 将 fp (一个支持 .read() 并包含一个 JSON 文档的 text file 或者 binary file) 反序列化为一个 Python 对象。
json.loads
def: json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
使用这个 转换表 将 s (一个包含 JSON 文档的 str, bytes 或 bytearray 实例) 反序列化为 Python 对象。
Infinite 和 NaN 数值
RFC 不允许 infinite 或者 NaN 数值的表达方式。尽管这样,默认情况下,此模块接受并且输出 Infinity , -Infinity,和 NaN 好像它们是有效的JSON数字字面值
1 | # Neither of these calls raises an exception, but the results are not valid JSON |
序列化器中, allow_nan 参数可用于替代这个行为。反序列化器中, parse_constant 参数,可用于替代这个行为。
对象中的重复名称
RFC 具体说明了 在 JSON对象里的名字应该是唯一的,但没有规定如何处理JSON对象中的重复名称。默认下,此模块不引发异常;作为替代,对于给定名它将忽略除姓-值对之外的所有对:
1 | '{"x": 1, "x": 2, "x": 3}' weird_json = |
The object_pairs_hook parameter can be used to alter this behavior.
命令行界面
The json.tool module provides a simple command line interface to validate and pretty-print JSON objects.
如果未指定可选的 infile 和 outfile 参数,则将分别使用 sys.stdin 和 sys.stdout:
1 | echo '{"json": "obj"}' | python -m json.tool |
在 3.5 版更改: 输出现在将与输入顺序保持一致。 请使用 --sort-keys 选项来将输出按照键的字母顺序排序。
命令行选项
infile
: 要被验证或美化打印的 JSON 文件, 如果未指定 infile,则从 sys.stdin 读取。:
1 | python -m json.tool mp_films.json |
-
outfile
: 将 infile 输出写入到给定的 outfile。 在其他情况下,将写入到 sys.stdout。 -
--sort-keys
: 将字典输出按照键的字母顺序排序。3.5 新版功能. -
--no-ensure-ascii
: 禁用非 ASCII 字符的转义,详情参见 json.dumps()。3.9 新版功能. -
--json-lines
: 将每个输入行解析为单独的 JSON 对象。3.8 新版功能. -
--indent, --tab, --no-indent, --compact
: 用于空白符控制的互斥选项。3.9 新版功能. -
-h, --help
: 显示帮助消息。
结语
第九十三篇博文写完,开心!!!!
今天,也是充满希望的一天。