Python LanguageJSONモジュール


備考

バージョン固有の機能を含む完全なドキュメントについては、公式ドキュメントを確認しください。

タイプ

デフォルト

jsonモジュールはデフォルトで以下の型のエンコーディングとデコードを処理します:

デシリアライゼーションタイプ:

JSON Python
オブジェクト dict
アレイリスト
文字列 str
数値(int) int
番号(実数) 浮く
真偽真偽
ヌル無し

jsonモジュールは、対応するfloat値としてNaNInfinity 、および-Infinityも理解しています。これはJSON仕様の範囲外です。

シリアライゼーションタイプ:

Python JSON
dict オブジェクト
リスト、タプルアレイ
str 文字列
int、float、(int / float)から継承された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モジュール 関連する例