プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

jsonモジュールによるJSONの処理

PythonJSONを取り扱うならjson一択だ。

簡単な使い方ならPyYAMLやruamel.yamlと大差ない。しかしJSONYAMLと異なり日付や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のデータ型は日付、時刻、16進数、8進数を除けばほぼそのままPythonに変換される
  • 以下に変換規則を一部記載する
JSONの型 Pythonの型
オブジェクト dict
配列 list
文字列 str
整数 int
真偽値 bool
null None
  • 変換されたPythonのデータとして処理すればOK
  • アクセス例
    • idはオブジェクト
print(json_data['id'])