【Python】JSONデータの操作方法(読み込み、書き込み、変換)
2021.09.11 /
本記事ではPythonによるJSONデータの操作方法(読み込み、書き込み、変換など)について解説していきます。
PythonでWebサイトからAPIを通して生データを取得するときや、AjaxといったJavaScriptを利用するときにJSONを使用します。
今ではシステム間でデータの受け渡しを行う際は、JSONを使用する機会が非常に多いです。
PythonでJSONデータを操作する方法を見ていきましょう。
本記事を通して以下の知識を学べます。
- JSONの特徴
- JSONのパース方法(読み込み)
- 辞書型からJSON形式への変換・出力方法
JSONとは
JSONとはJavaScriptのオブジェクト表記法を元にしたデータ形式です。
システム間でデータの受け渡しをするときに利用されます。
簡単に言うと、データを表記するための統一されたルールの一つがJSONということです。
XMLに比べて人間が見て理解しやすく軽量であるため、今では多くの場面でJSONは利用されています。
JSONデータは、数値とキー(数値の名前)のペアでデータを表しています。
{'key': 'value'}
より詳しくJSONについては知りたい方は以下記事をご参照ください。
JSONとは?特徴や記述方法、利用される場面について
PythonでJSONを操作する方法
PythonでJSONデータを操作する方法について解説していきます。
PythonでJSONを扱う際に注意するべき点として、JSONはすべてのPythonデータ形式を保持することはできません。
JSONで保持できるPythonのデータ型は以下になります。
- 文字列
- 整数
- 浮動小数点数
- ブール値
- リスト
- 辞書
- None
その他のPythonで扱うFileオブジェクトや、SeleniumのWebElement、CSVの各オブジェクトはJSONで保持できません
本記事で利用するJSONデータを以下に記します。
JSONデータ(test.json)
{
"Programming":[
{
"language":"python",
"level": "hard"
},
{
"language":"php",
"level":"normal"
}
]
}
jsonモジュールのインポート
PythonでJSONデータを操作するために、jsonモジュールを利用します。jsonモジュールは標準で組み込まれているため、pipでインストールする必要はありません。
スクリプトの先頭で次のようにjsonモジュールをインポートします。
import json
JSONデータをパースする
JSONデータをPythonで扱えるようにするために、まずはデータをパースする必要があります。
つまり、Pythonで扱える値にJSONデータを変換するということです。
JSONデータを読み込む(パース)する方法は2つあります。
- ファイルから読み込む(json.load()関数)
- 文字列から読み込む(json.loads()関数)
ファイルから読み込む(json.load()関数)
ファイル内のJSONデータをPythonの値に変換するためには、json.load()関数を使用します。
引数にはopen関数で返されたFileオブジェクトを指定します。
import json
file = open('test.json')
value = json.load(file)
print(value)
# {'Programming': [{'language': 'python', 'level': 'hard'}, {'language': 'php', 'level': 'normal'}]}
上記からもわかるように、json.load()関数の戻り値はPythonで扱いやすい辞書型となります。
文字列から読み込む(json.loads()関数)
文字列からJSONを読み込む場合は、json.loads()関数を使用します。
この関数名は「load string」を意味し、load関数と異なり「s」が付いていることに注意してください。
import json
json_data = '{"Programming":[{"language":"python","level": "hard"},{"language":"php","level":"normal"}]}'
value = json.loads(json_data)
print(value)
# {'Programming': [{'language': 'python', 'level': 'hard'}, {'language': 'php', 'level': 'normal'}]}
json.loads()関数もload()関数と同様に、戻り値はPythonで扱いやすい辞書型となります。
キーから値を取得する
json.load()関数の戻り値は辞書型なので、Pythonの辞書型を扱う方法でJSONから値を取り出すことができます。
次のようにキーを指定することで値を取得できます。
import json
file = open('test.json')
value = json.load(file)
print(value['Programming'])
# [{'language': 'python', 'level': 'hard'}, {'language': 'php', 'level': 'normal'}]
test.jsonからネストされたpythonの文字列を取得するには次のようにアクセスします。
import json
file = open('test.json')
value = json.load(file)
print(value["Programming"][0]["language"])
# python
辞書型からJSON形式に変換(json.dumps()関数)
Pythonの辞書型の値をJSON形式にする変換するには、json.dumps()関数を使用します。
import json
json_data = {'python': True, 'php': None}
value = json.dumps(json_data)
print(value)
# {"python": true, "php": null}
辞書型からJSON形式のデータを生成したいときに利用します。
辞書型からJSONファイルを出力(json.dump()関数)
Pythonの辞書型の値からJSON形式に変換し、その値をJSONファイルに出力するにはjson.dump()関数を使用します。
この関数はJSONファイルの値を書き換える(上書きする)ときにも利用できます。
import json
json_data = '{"Programming":[{"language":"python","level": "hard"},{"language":"php","level":"normal"}]}'
value = json.loads(json_data)
value["Programming"][0]["language"] = "HTML"
file_write = open("test.json", "w")
json.dump(value, file_write)
file_write.close()
file = open("test.json")
value = json.load(file)
print(value)
# {'Programming': [{'language': 'HTML', 'level': 'hard'}, {'language': 'php', 'level': 'normal'}]}
json.dump()関数の引数は次のように指定してください。
- 第一引数:辞書型の値
- 第二引数:open関数で返されたFileオブジェクト
第二引数で指定するFileオブジェクトは、open関数のオプションにw(書き込み可能を意味する)をつけ忘れないように注意してください。
まとめ
本記事「【Python】JSONデータの操作方法(読み込み、書き込み、変換)」はいかがでしたか。
Web APIではJSONをサポートしていることがほとんどです。
ぜひJSONを理解して、Web APIやJSONを使う技術を使いこなせるようになりましょう。