標準ライブラリjsonを使用すると、JSON形式の文字列と辞書型を相互に変換することができます。使い方を見ていきましょう
Contents
dict型からJSON文字列に変換
dumpsによる辞書からJSONへの変換
json.dumpsを使用すると、dict型からJSONに変換することができます。また、引数にindentを指定すると指定した数だけスペースでインデントをつけた見やすい形に整形してくれます。
import json # dict型からJSON文字列に変換する dict_data = {"items" : [{"id" :1, "name": "pen"}, {"id" :2, "name": "apple"}, {"id" :3, "name": "painapple"}], "status": "sell"} # JSONの文字列形式 json_str = json.dumps(dict_data) print(json_str) # インデントをつける json_str = json.dumps(dict_data, indent=2) print(json_str)
ASCIIエンコード
また、デフォルトではASCIIにエンコードされますので、ASCIIエンコードしない場合はensure_ascii=Falseを指定します。
import json # 日本語が格納された辞書 dict_data = {"items" : [{"id" :1, "name": "ペン"}, {"id" :2, "name": "アップル"}, {"id" :3, "name": "パイナップル"}], "status": "sell"} # asciiエンコードする場合 json_str = json.dumps(dict_data, ensure_ascii=True) # 日本語部分が\u30da\u30f3のように出力される。 print(json_str) # asciiエンコードしない場合 json_str = json.dumps(dict_data, ensure_ascii=False) print(json_str)
loads JSON文字列から辞書に変換
今度は逆にJSON文字列から辞書に変換してみましょう。json.loadsを使用します。
import json # JSON文字列から辞書に変換する json_str = '{"items": [{"id": 1, "name": "ペン"}, {"id": 2, "name": "アップル"}, {"id": 3, "name": "パイナップル"}], "status": "sell"}' dict_data = json.loads(json_str) print(type(dict_data)) # <class 'dict'> dict型に変換できたことが確認
load JSONファイルからdict型に変換
また、JSONファイルの場合はread()で一旦文字列に変換しなくてもloadを使用することでファイルオブジェクトから辞書に変換することが可能となります。
import json # JSONファイルから辞書に変換する f = open('json_file.txt', 'r') dict_data = json.load(f) print(type(dict_data)) # <class 'dict'> 辞書に変換できたことが確認