概要
JSONの文字列が与えられたときの扱い。
json.loads
で文字列をPythonの変数に変換(デコード)json.dumps
でPythonの変数を文字列に変換(エンコード)ensure_ascii=False
でユニコード文字をエスケープさせないindent=n
でJSONの構造に即した改行・インデントを適用
json.loads
json.loads
メソッドは、JSON文字列をPythonの変数にデコードする。Pythonの辞書になっていることがわかる。
1 2 3 4 5 6 7 8 9 10 |
mport json jsontext = '{ "要素1": "値1", "要素2": { "要素2-1": "値2-1" } }' decoded = json.loads(jsontext) print(type(decoded)) print(decoded) # <class 'dict'> # {'要素1': '値1', '要素2': {'要素2-1': '値2-1'}} |
JSONのキーと値が辞書のキーと値に対応している。
json.dumps
そのままエンコードした場合
json.dumps
は、辞書に変換されたJSONの内容を文字列にエンコードする。
ただしこのとき、ユニコードはエスケープされ、改行を含まない文字列となる。
1 2 3 4 5 6 7 8 9 10 11 12 |
mport json jsontext = '{ "要素1": "値1", "要素2": { "要素2-1": "値2-1" } }' decoded = json.loads(jsontext) encoded = json.dumps(decoded) print(type(encoded)) print(encoded) # <class 'str'> # {"\u8981\u7d201": "\u50241", "\u8981\u7d202": {"\u8981\u7d202-1": "\u50242-1"}} |
引数設定によるJSONの構造表現
以下の2つの引数を指定する。
ensure_ascii=False
- ユニコードをエスケープせずそのままの表現とする。
indent=n
- JSONの構造に即した改行・インデントを適用する。
これによって、ユニコード文字列はエスケープされず、JSONの構造に即した改行・インデントが適用された文字列が得られる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import json jsontext = '{ "要素1": "値1", "要素2": { "要素2-1": "値2-1" } }' decoded = json.loads(jsontext) encoded = json.dumps(decoded, ensure_ascii=False, indent=4) print(encoded) # { # "要素1": "値1", # "要素2": { # "要素2-1": "値2-1" # } # } |