PythonでJSONを解析する方法

公開: 2022-02-09

JSONは、データ交換の一般的な形式です。 Pythonには、JSONデータを解析して操作するための組み込みのJSONモジュールが付属しています。 そして、このチュートリアルでは、PythonでのJSONの操作についてすべて説明します。

このチュートリアルを終えると、次のことがわかります。

  • JSONの基本、
  • PythonでJSON文字列を解析および作成する方法、および
  • PythonでJSONファイルの読み取りと書き込みを行う方法。

はじめましょう!

JSONとは何ですか?

JSONJavaS 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ファイルが別のフォルダーにある場合は、必ずファイルへのパスを指定してください。

read-json-file-in-python
Pythonで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ファイルの内容を調べることができます。

create-json-file-python
PythonでJSONファイルを作成する

ファイルに書き込むときの主な目標は、データの保存です。 また、フォーマットを保持したい場合は、 indentsort_keysパラメーターを使用することもできます。

結論

簡単な要約の時間です。

このチュートリアルでは、次のことを学びました。

  • JSONの使用の基本、
  • load()メソッドとloads() load()メソッドを使用してJSON文字列とJSONファイルをそれぞれ読み取る方法
  • dumps() )メソッドとdump()メソッドを使用して、PythonディクショナリをそれぞれJSON文字列とJSONファイルにダンプする方法。

このチュートリアルがお役に立てば幸いです。 幸せな学習!

また、JSONツールを調べて、解析、フォーマット、および検証することもできます。