【Python】jsonモジュールについて【標準ライブラリ】

【Python】jsonモジュールについて【標準ライブラリ】

jsonモジュールとは

json モジュールは、Pythonの標準ライブラリに含まれており、JSON(JavaScript Object Notation)データを扱うための機能を提供します。 JSONは、軽量で構造化されたデータを扱うフォーマットであり、Web APIやデータ交換に広く利用されています。

Pythonでは、辞書(dict)、リスト(list)、タプル(tuple)、文字列(str)、数値(int, float)、ブール値(bool)、None などのオブジェクトをJSONに変換できます。

PythonオブジェクトをJSONに変換(エンコード)

json.dumps() を使用すると、PythonのオブジェクトをJSON形式の文字列に変換できます。

import json

data = {"name": "Alice", "age": 25, "city": "Tokyo"}
json_str = json.dumps(data)
print(json_str)

出力:

{"name": "Alice", "age": 25, "city": "Tokyo"}

変換後のデータは文字列なので、そのまま保存したり、APIのリクエストボディとして使用できます。

JSONをPythonオブジェクトに変換(デコード)

json.loads() を使用すると、JSON形式の文字列をPythonのオブジェクトに変換できます。

json_str = '{"name": "Alice", "age": 25, "city": "Tokyo"}'
data = json.loads(json_str)
print(data["name"])  # Alice

JSONからPythonの辞書に変換されるため、辞書のキーを使って値を取得できます。

JSONファイルの読み書き

JSONファイルを扱う場合、json.dump()json.load() を使用します。

JSONを書き込む

with open("data.json", "w") as f:
    json.dump(data, f)

JSONを読み込む

with open("data.json", "r") as f:
    data = json.load(f)
print(data)

カスタマイズ(カスタムエンコーダとデコーダ)

Pythonのオブジェクトの中には、JSONに直接変換できないものもあります(例:datetime)。

カスタムエンコーダ

import json
from datetime import datetime

class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

data = {"time": datetime.now()}
json_str = json.dumps(data, cls=DateTimeEncoder)
print(json_str)

カスタムデコーダ

def datetime_decoder(dct):
    if "time" in dct:
        dct["time"] = datetime.fromisoformat(dct["time"])
    return dct

data = json.loads(json_str, object_hook=datetime_decoder)
print(data)

JSONフォーマットのオプション

読みやすく整形するには、indent オプションを使用します。

json_str = json.dumps(data, indent=4)
print(json_str)

jsonモジュールを使う際の注意点

  • PythonのタプルはJSONではリストに変換される
  • JSONではコメントを使用できない
  • キーは必ず文字列でなければならない
  • Nonenull に変換される

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です