PythonでJSONを解析する方法
公開: 2022-02-09JSONは、データ交換の一般的な形式です。 Pythonには、JSONデータを解析して操作するための組み込みのJSONモジュールが付属しています。 そして、このチュートリアルでは、PythonでのJSONの操作についてすべて説明します。
このチュートリアルを終えると、次のことがわかります。
- JSONの基本、
- PythonでJSON文字列を解析および作成する方法、および
- PythonでJSONファイルの読み取りと書き込みを行う方法。
はじめましょう!
JSONとは何ですか?
JSONはJavaS cript O bject 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()メソッドではなく
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'}]}
ファイルから読み取るときに、モードをreadとして指定します—上記のコードでは'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の使用の基本、
- load()メソッドと
loads()
load()
メソッドを使用してJSON文字列とJSONファイルをそれぞれ読み取る方法 dumps()
)メソッドとdump()
メソッドを使用して、PythonディクショナリをそれぞれJSON文字列とJSONファイルにダンプする方法。
このチュートリアルがお役に立てば幸いです。 幸せな学習!
また、JSONツールを調べて、解析、フォーマット、および検証することもできます。