カネキン伊藤テック

JSONの扱い

Pythonには組み込みライブラリ json があり、とくに外部ライブラリをインストールしなくても import json することでシリアライズ(エンコード)・デシリアライズ(デコード・パース)を簡単に行うことができる。

PythonデータをJSONにする(エンコード)

import json

v1 = 100
print(json.dumps(v1))
#=> "100"

v2 = "もじ"
print(json.dumps(v2))
#=> '"\\u3082\\u3058"'

v3 = "もじもじ"
print(json.dumps(v2, ensure_ascii=False))
#=> '"もじもじ"'
# ensure_ascii=Falseで非ASCII文字をunicode code pointにしない

v4 = [10, "aaa"]
print(json.dumps(v4))
#=> '[10, "aaa"]'

v5 = {"key1": 123}
print(json.dumps(v5))
#=> '{"key1": 123}'

v6 = {"key1": 123, "key2": 987}
print(json.dumps(v6, indent=4))
#=> 以下のような出力(インデントと改行がつく)
# {
#     "key1": 123,
#     "key2": 987
# }

標準ライブラリ json を使う。標準なので外部からインストールしなくてもimportできる。
別名で dump() という関数もあることに注意。文字列として得る場合は dumps() を使う。

JSON文字列をPythonデータにする(デコード)

import json

json1 = "1"
v1 = json.loads(json1)
#=> 1 (int型)

json2 = '"もじれつ"'
v2 = json.loads(json2)
#=> "もじれつ" (str型)

json3 = "true"
v3 = json.loads(json3)
#=> True (bool型)

json4 = "[1, 2, 3]"
v4 = json.loads(json4)
#=> [1, 2, 3] (list型)

json5 = '{"key1": 1, "key2": "moji", "key3": 3.3}'
v5 = json.loads(json5)
#=> {"key1": 1, "key2": "moji", "key3": 3.3} (dict型)

エンコードしつつfileオブジェクトににJSONを出力

import json

data = {"key1": [10, 20, 30]}
with open("json_file.json", "w") as fh:
    json.dump(data, fh)

dumps() ではなく dump() だと第二引数にファイルオブジェクトを取る。

fileオブジェクトからJSONを読み込んでデコード

import json
with open("json_file.json") as fh:
    data = json.load(fh)

loads() ではなく load() だと文字列ではなくファイルオブジェクトを指定。

参考リンク