JSON は データ交換用の一般的な形式です。 Python には 、JSON データを解析して操作するための 組み込み JSON モジュールが付属しています。 このチュートリアルでは、Python での JSON の操作についてすべて説明します。
このチュートリアルを終えると、次のことを学習できるようになります。
- JSONの基本、
- Python で JSON 文字列を解析して作成する方法、および
- Python で JSON ファイルを読み書きする方法。
始めましょう!⏳
JSONとは何ですか?
JSON は Java Script Object N otation の 略で、 データ 交換用 の テキストベースの 形式です。 JSON は当初 JavaScript オブジェクトからインスピレーションを得ています が、ほとんどすべてのプログラミング言語が JSON の操作をサポートしています。
API を使用したり、構成ファイルを読んだりしたことがある場合は、JSON に遭遇したことがあるでしょう。
📑 API をクエリするときは、JSON でデータを送受信します。また、JSON はソフトウェア アプリケーションのクライアント/サーバー通信でも広く使用されています。さらに、JSON を汎用データ ストレージにも使用できます。
JSON の形式は、Python 辞書の形式と非常によく似ています。ディクショナリは、データをキーと値のペアで保存する Python の強力な組み込みデータ構造です。
先に進む前に、注目すべき点がいくつかあります。
- Python では、JSON オブジェクトは辞書として保存されます。
- JSON の配列は Python リストとして保存されます。
-
JSON では、ブール値は
true
およびfalse
として表されます。 Python では、これらはブール値True
およびFalse
に変換されます。
JSON から Python に変換されるデータ型の詳細については、 ここの ドキュメントを参照してください。
json
モジュールは Python 標準ライブラリの一部であるため、インストールする必要はありません。次のように、現在のディレクトリにインポートできます。
import json
Python で JSON 文字列をロードする方法
Python で JSON 文字列をロードするための一般的な構文は次のとおりです。
<dict_obj> = json.loads(<json_str>)
ここ、
-
<dict_obj>
は、JSON 文字列をロードする Python 辞書です。 -
<json_str>
は、任意の有効な JSON 文字列です。
これにより、
<json_str>
Python 辞書
<dict_obj>
にロードされます。
例をコーディングしてみましょう。ここで、
json_str
JSON 文字列です。
json_str = '''
{
"books": [
{
"title": "The Wind in the Willows",
"author": "Kenneth Grahame",
"year": "1908"
},
{
"title": "To the Lighthouse",
"author": "Virginia Woolf",
"year": "1927"
}
]
}
'''
以下のコード スニペットは
loads()
メソッドを使用して JSON 文字列
json_str
Python 辞書にロードする方法を示しています。組み込みの
type()
関数を使用して、
py_dict
Python 辞書であることを確認できます。
py_dict = json.loads(json_str)
type(py_dict)
# Output: dict
print(py_dict)
# Output
{'books': [{'title': 'The Wind in the Willows',
'author': 'Kenneth Grahame', 'year': '1908'},
{'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
上記のコードに示されているように、JSON 文字列のすべてのフィールドは
py_dict
のキーと値のペアです。
Python で JSON 文字列を作成する方法
Python 辞書があると仮定しましょう。では、そこから JSON 文字列を作成するにはどうすればよいでしょうか?
これは、次の構文で
dumps()
メソッドを使用して行うことができます。
<json_str> = json.dumps(<dict_obj>)
ここ、
-
<dict_obj>
、JSON 文字列の作成元となる Python 辞書です。 -
<json_str>
は、結果として得られる JSON 文字列です。
したがって、
dumps()
メソッドは
<dict_obj>
JSON 文字列
<json_str>
にダンプします。
既存の Python 辞書
py_dict
に追加します。新しいキー
"movies"
を追加しましょう。次のコード スニペットに示すようにこれを行うことができます。
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014",
"lang":"en","watched":True}]
ここで、
dumps()
メソッドを使用して、変更した辞書を新しい JSON 文字列
json_str2
にダンプしましょう。
json_str2 = json.dumps(py_dict)
print(json_str2)
# Output
{"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"},
{"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}],
"movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
上の例でわかるように、出力された JSON 文字列は、適切な形式に設定されていないと読み通すのが困難です。
オプションの
パラメーター
indent
使用してインデントを追加できます。
以下に示すように、
indent
2 のような整数に設定することでこれを行うことができます。
json_str2 = json.dumps(py_dict, indent = 2)
print(json_str2)
# Output
{
"books": [
{
"title": "The Wind in the Willows",
"author": "Kenneth Grahame",
"year": "1908"
},
{
"title": "To the Lighthouse",
"author": "Virginia Woolf",
"year": "1927"
}
],
"movies": [
{
"title": "The Imitation Game",
"year": "2014",
"lang": "en",
"watched": true
}
]
}
出力がインデントを使用してどのようにフォーマットされているかを観察すると、簡単に理解できます。
注 : 💡 キーをアルファベット順に並べ替えたい場合は、
sort_keys
パラメーターをTrue
に設定できます。
以下のコード スニペットでわかるように、キーはアルファベット順に並べ替えられています。
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True)
print(json_str2)
# Output
{
"books": [
{
"author": "Kenneth Grahame",
"title": "The Wind in the Willows",
"year": "1908"
},
{
"author": "Virginia Woolf",
"title": "To the Lighthouse",
"year": "1927"
}
],
"movies": [
{
"lang": "en",
"title": "The Imitation Game",
"watched": true,
"year": "2014"
}
]
そして、キーはアルファベット順に表示されます:
"author"
、
"title"
および
"year"
。
ここまでは、Python で JSON 文字列を操作する方法を学習しました。次のセクションでは、JSON ファイルの操作方法を学習します。
Python で JSON ファイルを読み取る方法
Python で JSON ファイルを読み取るには、次の構文を使用します。
json.load(<json-file>)
# where <json-file> is any valid JSON file.
load()
メソッドではなく、loads()
メソッドを使用する方法に注目してください。loads()
は JSON 文字列をロードし、load()
JSON ファイル をロードします。
Python でファイルを操作する場合は、コンテキスト マネージャーの使用を検討する必要があります。コンテキスト マネージャーを使用せずに、次のようにファイルの読み取りを試みることもできます。
my_file = open('students.json','r')
contents = my_file.read()
print(contents)
file.close()
ファイルを閉じないと、リソースが無駄に消費される可能性があります。
ただし、 コンテキスト マネージャー を使用する場合、ファイル操作が完了すると、ファイルは自動的に閉じられます。
また、以下に示すように、コンテキスト マネージャーを使用してファイルを読み取ることができます。
with open('students.json','r') as file:
data = json.load(file)
print(data)
# Output
{'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'},
{'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
ファイルから読み取るときに、モードを
読み取り
として指定します (上記のコードでは
'r'
で示されています)。
注 : 現在のディレクトリ内を簡単に移動できるように、以下の図に示すように、JSON ファイルが
main.py
と同じフォルダーにあることを確認してください。 JSON ファイルが別のフォルダーにある場合は、必ずファイルへのパスを指定してください。
次のセクションでは、JSON ファイルに書き込む方法を学習します。✍
Python で JSON ファイルに書き込む方法
既存の JSON ファイルに書き込むか、新しい JSON ファイルを作成するには、次のように
dump()
メソッドを使用します。
json.dump(<dict_obj>,<json_file>)
# where <dict_obj> is a Python dictionary
# and <json_file> is the JSON file
したがって、上記の構文は、辞書
<dict_obj>
を JSON ファイル
<json_file>
にダンプします。
前のセクションでは、辞書
py_dict
ありました。次に、それを新しい JSON ファイルにダンプしましょう。そして、それに
new_file.json
という名前を付けましょう。
次のコードセルは、
dump()
関数の使用方法を示しています。
with open('new_file.json','w') as file:
json.dump(py_dict,file)
注 : ファイルが存在する場合、 書き込み モード (
w
) でファイルを開くと、その内容が上書きされます。ファイルが存在しない場合は、ファイルが作成されます。
上記のコード セルを実行すると、現在の作業ディレクトリに新しい JSON ファイルが作成されたことがわかります。次に、JSON ファイルの内容を調べてみましょう。
ファイルに書き込む場合の主な目的はデータの保存です。また、書式設定を保持したい場合は、
indent
と
sort_keys
パラメーターを使用することもできます。
結論
⏲ 簡単にまとめます。
このチュートリアルでは、次のことを学習しました。
- JSON の使用の基本、
-
loads()
とload()
メソッドを使用して、それぞれ JSON 文字列と JSON ファイルを読み取る方法、 -
dumps()
とdump()
メソッドを使用して、Python 辞書をそれぞれ JSON 文字列と JSON ファイルにダンプする方法。
このチュートリアルがお役に立てば幸いです。楽しく学習しましょう!
JSON ツールを使用して解析、フォーマット、検証することもできます。