【Python】jsonを読み込んでリストに変換する方法

この記事では、JSONファイルやJSON文字列をPythonで読み込み、リストに変換する方法をわかりやすく解説します。

基本的な手順から実践的なコード例、エラーハンドリングまで、初心者でも理解しやすいように丁寧に説明しています。

目次から探す

JSONファイルの読み込み

PythonでJSONファイルを読み込む方法について解説します。

JSON(JavaScript Object Notation)は、データを保存および交換するための軽量なデータ形式です。

Pythonでは、標準ライブラリのjsonモジュールを使用してJSONデータを簡単に扱うことができます。

JSONファイルの準備

まず、JSONファイルを準備します。

以下は、サンプルのJSONファイルdata.jsonの内容です。

このファイルには、ユーザー情報が含まれています。

{
    "users": [
        {"id": 1, "name": "Alice", "age": 30},
        {"id": 2, "name": "Bob", "age": 25},
        {"id": 3, "name": "Charlie", "age": 35}
    ]
}

このファイルをプロジェクトのディレクトリに保存しておきます。

open関数を使ったファイルの読み込み

次に、Pythonのopen関数を使ってJSONファイルを読み込みます。

open関数は、ファイルを開くための組み込み関数で、ファイルを読み書きするために使用されます。

以下のコードは、data.jsonファイルを読み込む例です。

# ファイルを読み込みモードで開く
with open('data.json', 'r') as file:
    # ファイルの内容を読み込む
    file_content = file.read()
# 読み込んだ内容を表示
print(file_content)

このコードでは、withステートメントを使用してファイルを開きます。

withステートメントを使用すると、ファイルを自動的に閉じることができるため、リソースの管理が簡単になります。

'r'は読み込みモードを指定しています。

json.load関数の使い方

open関数でファイルを読み込んだ後、jsonモジュールのjson.load関数を使用して、JSONデータをPythonのデータ構造に変換します。

以下のコードは、data.jsonファイルを読み込み、JSONデータをPythonの辞書型に変換する例です。

import json
# ファイルを読み込みモードで開く
with open('data.json', 'r') as file:
    # JSONデータをPythonの辞書型に変換
    data = json.load(file)
# 変換したデータを表示
print(data)

このコードでは、json.load関数を使用して、ファイルの内容をPythonの辞書型に変換しています。

変換されたデータは、data変数に格納されます。

以上で、JSONファイルの読み込み方法についての解説は終了です。

次のセクションでは、JSON文字列の読み込み方法について解説します。

JSON文字列の読み込み

JSONデータはファイルから読み込むだけでなく、文字列として直接扱うこともできます。

これにより、APIから取得したデータや、他のプログラムから受け取ったデータを簡単に処理することができます。

ここでは、JSON文字列をPythonのデータ構造に変換する方法について説明します。

JSON文字列の準備

まずは、JSON形式の文字列を準備します。

以下は、シンプルなJSON文字列の例です。

{
    "name": "Alice",
    "age": 30,
    "city": "Tokyo"
}

このJSON文字列をPythonのプログラム内で扱うためには、文字列として定義します。

json_string = '{"name": "Alice", "age": 30, "city": "Tokyo"}'

json.loads関数の使い方

Pythonの標準ライブラリであるjsonモジュールを使うことで、JSON文字列をPythonのデータ構造に変換することができます。

具体的には、json.loads関数を使用します。

以下に、json.loads関数を使ってJSON文字列を辞書型に変換する例を示します。

import json
# JSON文字列を定義
json_string = '{"name": "Alice", "age": 30, "city": "Tokyo"}'
# json.loads関数を使ってJSON文字列を辞書型に変換
data = json.loads(json_string)
# 変換されたデータを表示
print(data)

このコードを実行すると、以下のような出力が得られます。

{'name': 'Alice', 'age': 30, 'city': 'Tokyo'}

このようにして、JSON文字列をPythonの辞書型に変換することができます。

辞書型に変換されたデータは、通常の辞書と同様にキーを使って値にアクセスすることができます。

# 辞書型データから値を取得
name = data['name']
age = data['age']
city = data['city']
print(f"Name: {name}, Age: {age}, City: {city}")

このコードを実行すると、以下のような出力が得られます。

Name: Alice, Age: 30, City: Tokyo

以上が、JSON文字列を読み込んでPythonのデータ構造に変換する方法です。

次に、JSONデータをリストに変換する方法について説明します。

JSONデータをリストに変換する方法

JSONデータの構造を確認する

まず、JSONデータの構造を確認することが重要です。

JSON(JavaScript Object Notation)は、データをキーと値のペアで表現する軽量なデータ交換フォーマットです。

Pythonでは、JSONデータは辞書型(dict)として読み込まれます。

以下は、典型的なJSONデータの例です。

{
    "name": "John",
    "age": 30,
    "city": "New York",
    "hobbies": ["reading", "traveling", "swimming"]
}

このJSONデータは、キーと値のペアで構成されており、値には文字列、数値、リストなどが含まれています。

リストに変換するための基本的な手順

JSONデータをリストに変換するための基本的な手順は以下の通りです。

  1. JSONデータを辞書型として読み込む。
  2. 必要なキーの値をリストとして抽出する。

辞書型からリスト型への変換

まず、シンプルなJSONデータを辞書型からリスト型に変換する方法を見てみましょう。

以下の例では、JSONデータから特定のキーの値をリストとして抽出します。

import json
# JSONデータの例
json_data = '''
{
    "name": "John",
    "age": 30,
    "city": "New York",
    "hobbies": ["reading", "traveling", "swimming"]
}
'''
# JSONデータを辞書型に変換
data = json.loads(json_data)
# 辞書型からリスト型に変換
hobbies_list = data["hobbies"]
print(hobbies_list)  # ['reading', 'traveling', 'swimming']

この例では、json.loads関数を使ってJSONデータを辞書型に変換し、その後、hobbiesキーの値をリストとして抽出しています。

ネストされたJSONデータの処理

次に、ネストされたJSONデータをリストに変換する方法を見てみましょう。

ネストされたJSONデータとは、辞書の中にさらに辞書やリストが含まれている構造のことです。

以下の例では、ネストされたJSONデータから特定の値をリストとして抽出します。

import json
# ネストされたJSONデータの例
json_data = '''
{
    "name": "John",
    "age": 30,
    "address": {
        "street": "123 Main St",
        "city": "New York",
        "zipcode": "10001"
    },
    "hobbies": ["reading", "traveling", "swimming"]
}
'''
# JSONデータを辞書型に変換
data = json.loads(json_data)
# ネストされた辞書からリスト型に変換
address_list = [data["address"]["street"], data["address"]["city"], data["address"]["zipcode"]]
print(address_list)  # ['123 Main St', 'New York', '10001']

この例では、addressキーの値がさらに辞書型になっているため、その中の各キーの値をリストとして抽出しています。

以上が、JSONデータをリストに変換する基本的な方法です。

JSONデータの構造を理解し、適切に辞書型からリスト型に変換することで、データの操作が容易になります。

実践例

ここでは、実際にPythonを使ってJSONデータをリストに変換する具体的な例を見ていきます。

シンプルなJSONデータと複雑なJSONデータの両方を取り上げ、それぞれのコード例とその解説を行います。

シンプルなJSONデータの例

まずは、シンプルなJSONデータを扱う例を見てみましょう。

以下のようなJSONデータを考えます。

[
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25},
    {"name": "Charlie", "age": 35}
]

このJSONデータをPythonでリストに変換する方法を見ていきます。

import json
# JSONデータを文字列として定義
json_data = '''
[
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25},
    {"name": "Charlie", "age": 35}
]
'''
# JSON文字列をPythonのリストに変換
data_list = json.loads(json_data)
# 結果を表示
print(data_list)

このコードを実行すると、以下のようなリストが得られます。

[
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

このように、json.loads関数を使うことで、JSON文字列を簡単にPythonのリストに変換することができます。

複雑なJSONデータの例

次に、もう少し複雑なJSONデータを扱う例を見てみましょう。

以下のようなネストされたJSONデータを考えます。

{
    "employees": [
        {"name": "Alice", "age": 30, "department": {"name": "HR", "location": "New York"}},
        {"name": "Bob", "age": 25, "department": {"name": "Engineering", "location": "San Francisco"}},
        {"name": "Charlie", "age": 35, "department": {"name": "Finance", "location": "Chicago"}}
    ]
}

このJSONデータをPythonでリストに変換する方法を見ていきます。

import json
# JSONデータを文字列として定義
json_data = '''
{
    "employees": [
        {"name": "Alice", "age": 30, "department": {"name": "HR", "location": "New York"}},
        {"name": "Bob", "age": 25, "department": {"name": "Engineering", "location": "San Francisco"}},
        {"name": "Charlie", "age": 35, "department": {"name": "Finance", "location": "Chicago"}}
    ]
}
'''
# JSON文字列をPythonの辞書に変換
data_dict = json.loads(json_data)
# 辞書からリストを取り出す
employees_list = data_dict["employees"]
# 結果を表示
print(employees_list)

このコードを実行すると、以下のようなリストが得られます。

[
    {'name': 'Alice', 'age': 30, 'department': {'name': 'HR', 'location': 'New York'}},
    {'name': 'Bob', 'age': 25, 'department': {'name': 'Engineering', 'location': 'San Francisco'}},
    {'name': 'Charlie', 'age': 35, 'department': {'name': 'Finance', 'location': 'Chicago'}}
]

このように、ネストされたJSONデータでも、json.loads関数を使って辞書に変換し、必要な部分をリストとして取り出すことができます。

実際のコード例とその解説

ここでは、実際のコード例を使って、JSONデータをリストに変換する手順を詳しく解説します。

まず、JSONデータをファイルから読み込む例を見てみましょう。

以下のようなJSONファイル(data.json)があるとします。

[
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25},
    {"name": "Charlie", "age": 35}
]

このファイルをPythonで読み込み、リストに変換するコードは以下の通りです。

import json
# JSONファイルを読み込む
with open('data.json', 'r') as file:
    data_list = json.load(file)
# 結果を表示
print(data_list)

このコードを実行すると、以下のようなリストが得られます。

[
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

このように、json.load関数を使うことで、ファイルから読み込んだJSONデータを簡単にリストに変換することができます。

次に、ネストされたJSONデータをファイルから読み込む例を見てみましょう。

以下のようなJSONファイル(nested_data.json)があるとします。

{
    "employees": [
        {"name": "Alice", "age": 30, "department": {"name": "HR", "location": "New York"}},
        {"name": "Bob", "age": 25, "department": {"name": "Engineering", "location": "San Francisco"}},
        {"name": "Charlie", "age": 35, "department": {"name": "Finance", "location": "Chicago"}}
    ]
}

このファイルをPythonで読み込み、リストに変換するコードは以下の通りです。

import json
# JSONファイルを読み込む
with open('nested_data.json', 'r') as file:
    data_dict = json.load(file)
# 辞書からリストを取り出す
employees_list = data_dict["employees"]
# 結果を表示
print(employees_list)

このコードを実行すると、以下のようなリストが得られます。

[
    {'name': 'Alice', 'age': 30, 'department': {'name': 'HR', 'location': 'New York'}},
    {'name': 'Bob', 'age': 25, 'department': {'name': 'Engineering', 'location': 'San Francisco'}},
    {'name': 'Charlie', 'age': 35, 'department': {'name': 'Finance', 'location': 'Chicago'}}
]

このように、ネストされたJSONデータでも、json.load関数を使ってファイルから読み込み、必要な部分をリストとして取り出すことができます。

以上のように、Pythonを使ってJSONデータをリストに変換する方法を具体的な例を通じて解説しました。

シンプルなJSONデータから複雑なネストされたJSONデータまで、さまざまなケースに対応できるようになります。

エラーハンドリング

PythonでJSONデータを扱う際には、さまざまなエラーが発生する可能性があります。

これらのエラーを適切に処理することで、プログラムの信頼性と安定性を向上させることができます。

ここでは、代表的なエラーとその対処法について解説します。

JSONDecodeErrorの対処法

JSONデータを読み込む際に、データが正しい形式でない場合にはjson.JSONDecodeErrorが発生します。

このエラーは、JSONデータが不正な形式である場合や、データが破損している場合に発生します。

以下は、json.JSONDecodeErrorをキャッチして適切に対処する例です。

import json
json_string = '{"name": "John", "age": 30, "city": "New York"'
try:
    data = json.loads(json_string)
except json.JSONDecodeError as e:
    print(f"JSONDecodeError: {e}")

この例では、JSON文字列が不完全であるため、json.loads関数JSONDecodeErrorを発生させます。

try-exceptブロックを使用してエラーをキャッチし、エラーメッセージを表示しています。

ファイル読み込み時のエラー対策

JSONファイルを読み込む際には、ファイルが存在しない、読み取り権限がない、ファイルが破損しているなどの理由でエラーが発生することがあります。

これらのエラーを適切に処理するためには、try-exceptブロックを使用します。

以下は、ファイル読み込み時のエラーをキャッチして対処する例です。

import json
file_path = 'data.json'
try:
    with open(file_path, 'r') as file:
        data = json.load(file)
except FileNotFoundError:
    print(f"FileNotFoundError: The file {file_path} does not exist.")
except PermissionError:
    print(f"PermissionError: You do not have permission to read the file {file_path}.")
except json.JSONDecodeError as e:
    print(f"JSONDecodeError: {e}")

この例では、FileNotFoundErrorPermissionError、およびjson.JSONDecodeErrorをキャッチして、それぞれのエラーメッセージを表示しています。

データ変換時のエラー対策

JSONデータをリストに変換する際にも、さまざまなエラーが発生する可能性があります。

例えば、期待しているデータ形式と異なる場合や、データが欠損している場合などです。

これらのエラーを適切に処理するためには、データの検証とエラーハンドリングを行います。

以下は、データ変換時のエラーをキャッチして対処する例です。

import json
json_string = '{"users": [{"name": "John", "age": 30}, {"name": "Jane"}]}'
try:
    data = json.loads(json_string)
    users = data['users']
    user_list = []
    for user in users:
        if 'name' in user and 'age' in user:
            user_list.append((user['name'], user['age']))
        else:
            raise ValueError("Missing 'name' or 'age' in user data")
except json.JSONDecodeError as e:
    print(f"JSONDecodeError: {e}")
except KeyError as e:
    print(f"KeyError: Missing key {e}")
except ValueError as e:
    print(f"ValueError: {e}")
print(user_list)

この例では、JSONデータをリストに変換する際に、各ユーザーのデータにnameageが含まれているかをチェックしています。

もし欠損している場合には、ValueErrorを発生させてエラーメッセージを表示します。

以上のように、エラーハンドリングを適切に行うことで、JSONデータの読み込みや変換時に発生する問題を効果的に対処することができます。

目次から探す