Python を使った JSON データの操作

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

JSON(JavaScriptオブジェクト表記法)は、直列化され人間が読みやすい形式でデータを保存するための人気のあるデータ形式です。一般的にサーバーとWebアプリケーションの間でデータを送信するために使用され、NoSQLデータベースにデータを保存するための素晴らしい選択肢でもあります。Pythonでは、jsonモジュールを使用してJSONデータを操作できます。

成果

  • JSONファイルの読み書き
  • JSONデータのシリアル化と逆シリアル化

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/DataStructuresGroup -.-> python/dictionaries("Dictionaries") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/PythonStandardLibraryGroup -.-> python/data_serialization("Data Serialization") subgraph Lab Skills python/dictionaries -.-> lab-85{{"Python を使った JSON データの操作"}} python/standard_libraries -.-> lab-85{{"Python を使った JSON データの操作"}} python/file_reading_writing -.-> lab-85{{"Python を使った JSON データの操作"}} python/with_statement -.-> lab-85{{"Python を使った JSON データの操作"}} python/data_collections -.-> lab-85{{"Python を使った JSON データの操作"}} python/data_serialization -.-> lab-85{{"Python を使った JSON データの操作"}} end

JSONのはじめに

JSON(JavaScriptオブジェクト表記法)は、人間が読み書きしやすく、機械が解析し生成しやすい軽量のデータ交換形式です。JavaScript言語のサブセットに基づいており、Standard ECMA-262 3rd Edition - December 1999に準拠しています。JSONは完全に言語非依存のテキスト形式ですが、C言語ファミリーの言語(C、C++、C#、Java、JavaScript、Perl、Pythonなど)のプログラマーにとって馴染みのある規約を使用しています。これらの特性により、JSONは理想的なデータ交換言語になっています。

JSONの基本構造は、キーと値のペアのコレクションであるオブジェクトと、値の順序付きリストである配列で構成されています。

以下はJSONオブジェクトの例です:

{
  "name": "Alice",
  "age": 26,
  "city": "New York"
}

このJSONオブジェクトには3つのキーと値のペアがあります:

  • "name" : "Alice"
  • "age" : 26
  • "city" : "New York"

以下はJSON配列の例です:

["apple", "banana", "cherry"]

このJSON配列には3つの値があります:"apple"、"banana"、および"cherry"。

JSONオブジェクトには複数のキーと値のペアと配列を含めることができ、JSON配列には複数のオブジェクトと配列を含めることができます。以下はより複雑なJSON構造の例です:

{
  "employees": [
    { "firstName": "John", "lastName": "Doe" },
    { "firstName": "Anna", "lastName": "Smith" },
    { "firstName": "Peter", "lastName": "Jones" }
  ],
  "owners": [
    { "name": "Alice", "age": 30 },
    { "name": "Bob", "age": 35 }
  ],
  "office": {
    "name": "Acme Inc.",
    "location": "New York"
  }
}

このJSONオブジェクトには3つのキーと値のペアがあります:

  • "employees" : 従業員オブジェクトの配列
  • "owners" : オーナーオブジェクトの配列
  • "office" : オフィスオブジェクト

Jsonモジュール

PythonでJSONオブジェクトを解析するには、jsonモジュールを使用できます。jsonモジュールはPython標準ライブラリの一部であるため、別途インストールする必要はありません。

新しいPythonインタプリタセッションを開き、次のコードを入力します:

python3

前の例のJSONオブジェクトを解析する方法の例を次に示します:

import json

json_strings = '{"employees": [{ "firstName": "John", "lastName": "Doe"}, ], "owners": [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 35 }], "office": {"name": "Acme Inc."}}'

## JSONオブジェクトを解析する
data = json.loads(json_strings)

## データにアクセスする
employees = data['employees']
owners = data['owners']
office = data['office']

## データを表示する
print(employees)
print(owners)
print(office)

これにより、次のような出力が表示されます:

[{'firstName': 'John', 'lastName': 'Doe'}]
[{'name': 'Alice', 'age': 30}, { "name": "Bob", "age": 35 }]
{'name': 'Acme Inc.'}

その後、Pythonの辞書やリストと同じように、キーとインデックスを使ってJSONオブジェクト内のデータにアクセスできます。たとえば、最初の従業員の名前にアクセスするには、次のコードを使用できます:

first_employee = employees[0]
first_name = first_employee['firstName']
print(first_name)

これにより、次のような出力が表示されます:

John

また、配列をループして各要素のデータにアクセスすることもできます。たとえば、各オーナーの名前と年齢を表示するには、次のコードを使用できます:

for owner in owners:
  name = owner['name']
  age = owner['age']
  print(f'{name} is {age} years old.')

これにより、次のような出力が表示されます:

Alice is 30 years old.
Bob is 35 years old.

JSONファイルの読み込み

まずはJSONファイルを読み込んでみましょう。次の内容を持つemployees.jsonファイルがあるとします:

{
  "employees": [
    {
      "firstName": "John",
      "lastName": "Doe"
    },
    {
      "firstName": "Anna",
      "lastName": "Smith"
    },
    {
      "firstName": "Peter",
      "lastName": "Jones"
    }
  ]
}

employees.json/home/labex/projectに存在しています。

Pythonでこのファイルを読み込むには、次のコードを使用できます:

import json

## ファイルを開く
with open('/home/labex/project/employees.json', 'r') as file:
  ## ファイルの内容を変数に読み込む
  data = json.load(file)

## ファイルの内容を表示する
print(data)

これにより、次のような出力が表示されます:

{'employees': [{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]}

JSONオブジェクトのキーを使って、ファイル内のデータにアクセスできます。Pythonの辞書と同じようにです。たとえば、従業員のリストにアクセスするには、employeesキーを使います:

employees = data['employees']
print(employees)

これにより、次のような出力が表示されます:

[{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]

また、従業員のリストをループして彼らの名前を表示することもできます:

for employee in employees:
  print(employee['firstName'], employee['lastName'])

これにより、次のような出力が表示されます:

John Doe
Anna Smith
Peter Jones

JSONファイルの書き込み

JSONファイルを読む方法を知ったので、書き込む方法を学んでみましょう。JSONファイルにデータを書き込むには、json.dump()関数を使用できます。

学生に関する情報を含む辞書のリストがあるとします。このデータをstudents.jsonという名前のファイルに書き込むことができます。

import json

## 辞書のリスト
students = [
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

## ファイルを開く
with open('students.json', 'w') as file:
  ## データをファイルに書き込む
  json.dump(students, file)

では、データが正しく書き込まれたことを確認しましょう。

with open('students.json', 'r') as file:
  data = json.load(file)
  print(data)

これにより、次のような出力が表示されます。

[
  { "name": "Alice", "age": 26, "major": "Computer Science" },
  { "name": "Bob", "age": 27, "major": "Economics" },
  { "name": "Charlie", "age": 25, "major": "Physics" }
]

また、PythonオブジェクトをJSON文字列に変換するには、json.dumps()関数を使用することもできます。これをファイルに保存したり、ネットワークを介して送信したりすることができます。例を示します。

## 辞書のリストをJSON文字列に変換する
json_string = json.dumps(students)
print(json_string)

## 文字列をファイルに保存する
with open('students.json', 'w') as file:
  file.write(json_string)

## では、データが正しく書き込まれたことを確認しましょう
with open('students.json', 'r') as file:
  data = json.load(file)
  print(data)

これは前の例と同じ出力になります。

PythonオブジェクトとJSON文字列

Pythonオブジェクトは、メモリに格納されるリスト、辞書などの形式のデータのコレクションです。一方、JSON文字列はJSONオブジェクトの直列化された表現です。JSONオブジェクト内のデータを表す文字の文字列ですが、実際のオブジェクトとしてメモリに格納されていません。

students.jsonの内容を読み取るためにread()関数を使用する方法の例を以下に示します。

with open('students.json', 'r') as file:
  json_string = file.read()
  print(json_string)

これにより、次のような出力が表示されます。

[{"name": "Alice", "age": 26, "major": "Computer Science"}, {"name": "Bob", "age": 27, "major": "Economics"}, {"name": "Charlie", "age": 25, "major": "Physics"}]

json_stringの最初の要素を取得しようとすると、文字列の最初の文字が取得されます。

print(json_string[0])
[

これは、json_stringが文字列であり、リスト(Pythonオブジェクト)ではないためです。リストに変換するには、json.loads()関数を使用できます。

import json

## JSON文字列をPythonオブジェクトに変換する
python_object = json.loads(json_string)
print(python_object)

出力は上記と同様で、シングルクォートとダブルクォートの違いがあります。

[{'name': 'Alice', 'age': 26,'major': 'Computer Science'}, {'name': 'Bob', 'age': 27,'major': 'Economics'}, {'name': 'Charlie', 'age': 25,'major': 'Physics'}]

これで、リストの最初の要素にアクセスできます。

print(python_object[0])
{ "name": "Alice", "age": 26, "major": "Computer Science" }

初心者はしばしばPythonオブジェクトとJSON文字列を混同してしまうので、特に注意してください。

まとめ

おめでとうございます!JSONファイルに関する実験を完了しました。PythonでJSONファイルを読み書きする方法を学びました。また、PythonでJSONデータを扱う方法も学びました。