PythonでJSON読み書き

はじめに

PythonでJSON扱うときにどの関数使うかいつも迷うので備忘録。
Windows10、Python3.8.2で動作確認。

JSON読み書きに使う関数

使う関数

  • 書き出しに使う
  • 読み出しに使う

末尾に「s」がついている関数は「str」の「s」で、ファイル入出力はしないと覚えておくとよい

注意点

  • 日本語をそのまま出力したいときは ensure_ascii=True
    • デフォルトは非 ASCII 文字はユニコードエスケープされる(ex “あ” -> “\u3042” )
  • 変換表にないオブジェクトを入力値にするとTypeErrorになる
    • 例えばsetはエラー。自作JSONEn(De)coderを作る必要あり

サンプルコード

書き出し

json.dump(オブジェクト=>ファイル)

import json

with open("sample.json", mode="w", encoding="utf-8") as f:
    json.dump({"あ": 1}, f, ensure_ascii=False, indent=4)

json.dumps(オブジェクト=>str型)

import json

s = json.dumps({"あ": 1}, ensure_ascii=False, indent=4)
print(type(s)) # dict型がstr型に変換されたことを確認 

読み出し

json.loads(str型=>オブジェクト)

import json

d = json.loads('{"あ": 1}')
print(type(d))  # str型がdict型に変換されたことを確認

json.load(ファイル =>オブジェクト)

import json
from pathlib import Path

Path("sample.json").write_text(data='{"あ": 1}', encoding="utf-8")  # サンプルデータをファイル出力
with open("sample.json", mode="r", encoding="utf-8") as f:
    d = json.load(f)
    print(type(d))  # ファイルから読みだしたデータがdict型に変換されたことを確認

おまけ(よく遭遇するError)サンプルコード

loadsの引数にstr型(or bytes or bytearray型)以外を渡している

import json

s = json.loads(1) # str, bytes, bytearray以外はError

上記コードを実行すると以下のError

Traceback (most recent call last):
  ...
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not int

dumpsの引数に変換表にないオブジェクトを渡している

import json

s = json.dumps({"A"}) # set型は変換表にないのでError

上記コードを実行すると以下のError

Traceback (most recent call last):
  ...
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type set is not JSON serializable

参考

コメントを残す

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

CAPTCHA