簡単な使い方ならPyYAMLやruamel.yamlと大差ない。しかしJSONはYAMLと異なり日付や16進数をデータ型としてサポートしていないのでPythonのデータを直列化するときは注意が必要だ。
例えばPythonの日付型データをJSONのどの型として扱うか指定しないで直列化するとTypeErrorが返ってきてしまう。
インストール
- 標準ライブラリなのでインストールは不要
import
import json
ファイルから読み込む
with open('test.json', 'r') as stream: json_data = json.load(stream)
- 全体がdictとして読み込まれている
<print(type(json_data))の結果> <class 'dict'>
strオブジェクトをJSON形式で読み込む
json_data = json.loads(string)
- loadsの末尾にはsが付く
ファイルへ書き込む
- dumpメソッドを使う
with open('test.json' , 'w') as stream: json.dump(json_data, stream)
strオブジェクトを作成
- dumpsメソッドを使う(最後に「s」あり!)
- 改行なし
json.dumps(json_data)
- 改行+ソート+インデントあり
json.dumps(json_data, sort_keys=True, indent=4)
- JSONがサポートしていないオブジェクトを直列化する場合
- 直列化できないオブジェクト対してdefaultオプションで指定した関数が呼ばれる
json.dumps(test_data, default = serializeObjects)
Iterate
- 第1階層のキーのみを表示する
- 第2階層以下を表示したい場合はfor文をネストすること
for key in test_json: print(key)
要素へのアクセス
JSONの型 | Pythonの型 |
---|---|
オブジェクト | dict |
配列 | list |
文字列 | str |
整数 | int |
真偽値 | bool |
null | None |
- 変換されたPythonのデータとして処理すればOK
- アクセス例
- idはオブジェクト
print(json_data['id'])