【Python】JSONデータの操作方法(読み込み、書き込み、変換)

時計 2021.09.11 / 時計

【Python】JSONデータの操作方法(読み込み、書き込み、変換)

本記事ではPythonによるJSONデータの操作方法(読み込み書き込み、変換など)について解説していきます。

PythonでWebサイトからAPIを通して生データを取得するときや、AjaxといったJavaScriptを利用するときにJSONを使用します。

今ではシステム間でデータの受け渡しを行う際は、JSONを使用する機会が非常に多いです。

PythonでJSONデータを操作する方法を見ていきましょう。

本記事を通して以下の知識を学べます。

学べる知識
  • JSONの特徴
  • JSONのパース方法(読み込み)
  • 辞書型からJSON形式への変換・出力方法

JSONとは

JSONとはJavaScriptのオブジェクト表記法を元にしたデータ形式です。
システム間でデータの受け渡しをするときに利用されます。

簡単に言うと、データを表記するための統一されたルールの一つがJSONということです。

XMLに比べて人間が見て理解しやすく軽量であるため、今では多くの場面でJSONは利用されています。

JSONデータは、数値とキー(数値の名前)のペアでデータを表しています。

{'key': 'value'}

より詳しく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つあります。

  1. ファイルから読み込む(json.load()関数)
  2. 文字列から読み込む(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を使う技術を使いこなせるようになりましょう。