JSON 模块
有关包含特定于版本的功能的完整文档,请查看官方文档 。
类型
默认
json 模块默认处理以下类型的编码和解码:
反序列化类型:
JSON | 
Python | 
|---|---|
| 宾语 | 字典 | 
| 排列 | 名单 | 
| 字符串 | 海峡 | 
| 数字(int) | INT | 
| 数字(真实) | float | 
| 真假 | 真假 | 
| 空值 | 没有 | 
json 模块还将 NaN,Infinity 和 -Infinity 理解为相应的浮点值,这超出了 JSON 规范。
序列化类型:
Python | 
JSON | 
|---|---|
| 字典 | 宾语 | 
| 列表,元组 | 排列 | 
| 海峡 | 字符串 | 
| int,float,(int / float)-derived Enums | 数 | 
| 真正 | 真正 | 
| 假 | 假 | 
| 没有 | 空值 | 
要禁止对 NaN,Infinity 和 -Infinity 进行编码,必须使用 allow_nan=False 进行编码。如果你尝试对这些值进行编码,则会产生一个 ValueError。
自定义(取消)序列化
有各种钩子,允许你处理需要以不同方式表示的数据。functools.partial 的使用允许你将相关参数部分应用于这些功能以方便使用。
连载:
你可以提供一个在对象序列化之前对对象进行操作的函数,如下所示:
# my_json module
import json
from functools import partial
def serialise_object(obj):
    # Do something to produce json-serialisable data
    return dict_obj
dump = partial(json.dump, default=serialise_object)
dumps = partial(json.dumps, default=serialise_object)
反序列化:
json 函数处理各种钩子,例如 object_hook 和 parse_float。有关你的 python 版本的详尽列表,请参阅此处 。
# my_json module
import json
from functools import partial
def deserialise_object(dict_obj):
    # Do something custom
    return obj
def deserialise_float(str_obj):
    # Do something custom
    return obj
load = partial(json.load, object_hook=deserialise_object, parse_float=deserialise_float)
loads = partial(json.loads, object_hook=deserialise_object, parse_float=deserialise_float)
进一步定制(去)序列化:
json 模块还允许扩展/替换 json.JSONEncoder 和 json.JSONDecoder 以处理各种类型。通过创建等效命名的方法,可以将上面记录的钩子添加为默认值。要使用这些,只需将类作为 cls 参数传递给相关函数。使用 functools.partial 可以将 cls 参数部分应用于这些函数以方便使用,例如
# my_json module
import json
from functools import partial
class MyEncoder(json.JSONEncoder):
    # Do something custom
class MyDecoder(json.JSONDecoder):
    # Do something custom
dump = partial(json.dump, cls=MyEncoder)
dumps = partial(json.dumps, cls=MyEncoder)
load = partial(json.load, cls=MyDecoder)
loads = partial(json.loads, cls=MyDecoder)