はじめに
JSON(JavaScriptオブジェクト表記法)は、直列化され人間が読みやすい形式でデータを保存するための人気のあるデータ形式です。一般的にサーバーとWebアプリケーションの間でデータを送信するために使用され、NoSQLデータベースにデータを保存するための素晴らしい選択肢でもあります。Pythonでは、json
モジュールを使用してJSONデータを操作できます。
成果
- JSONファイルの読み書き
- JSONデータのシリアル化と逆シリアル化
JSON(JavaScriptオブジェクト表記法)は、直列化され人間が読みやすい形式でデータを保存するための人気のあるデータ形式です。一般的にサーバーとWebアプリケーションの間でデータを送信するために使用され、NoSQLデータベースにデータを保存するための素晴らしい選択肢でもあります。Pythonでは、json
モジュールを使用して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つのキーと値のペアがあります:
以下は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つのキーと値のペアがあります:
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ファイルを読み込んでみましょう。次の内容を持つ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.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文字列は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データを扱う方法も学びました。