JSONの扱い
Table of contents
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()
だと文字列ではなくファイルオブジェクトを指定。