Python LanguageJSON模塊


備註

有關包含特定於版本的功能的完整文檔,請查看官方文檔

類型

默認

json模塊默認處理以下類型的編碼和解碼:

反序列化類型:

JSON 蟒蛇
賓語字典
排列名單
海峽
數字(int) INT
數字(真實) 浮動
真假真假
空值沒有

json模塊還將NaNInfinity-Infinity理解為相應的浮點值,這超出了JSON規範。

序列化類型:

蟒蛇 JSON
字典賓語
列表,元組排列
海峽
int,float,(int / float)-derived Enums
真正真正
沒有空值

要禁止編碼NaNInfinity-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.JSONEncoderjson.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)

JSON模塊 相關例子