[Python]JSONパース(parse)の基本(example、requests)

はじめに

本記事では、PythonでJSONをパースする方法について解説します。JSONとは何か、基本的なパース方法、requestsモジュールを使ったパース方法、応用例、よくあるエラーとその対処法についても触れていきます。

JSONとは何か

JSONとは、JavaScript Object Notationの略称で、データの形式の一つです。構造化されたデータを扱う際によく用いられ、JavaScriptだけでなくPythonなどのプログラミング言語でも扱うことができます。JSONは、以下のような形式で表現されます。

{
  "name": "tanaka",
  "age": 30,
  "city": "New York"
}

このように、JSONはキーと値のペアから構成され、波括弧{ }で囲まれています。キーはダブルクォーテーションで囲まれた文字列で表され、値は文字列、数値、真偽値、null、配列、またはオブジェクトのいずれかです。

PythonでのJSONのパース(parse)の基本

PythonでJSONをパースするには、jsonモジュールを使います。以下は、基本的なJSONのパース方法の例です。

import json
# JSONデータ
json_data = '{"name": "tanaka", "age": 30, "city": "New York"}'
# JSONデータをPythonオブジェクトに変換
data = json.loads(json_data)
# パースしたオブジェクトを表示
print(data)

上記のコードでは、jsonモジュールのloads関数を使ってJSONデータをPythonオブジェクトに変換し、パースしたオブジェクトを表示しています。実行結果は以下のようになります。

{'name': 'tanaka', 'age': 30, 'city': 'New York'}

また、PythonオブジェクトをJSONデータに変換する場合は、dumps関数を使います。

# Pythonオブジェクト
data = {'name': 'tanaka', 'age': 30, 'city': 'New York'}
# PythonオブジェクトをJSONデータに変換
json_data = json.dumps(data)
# 変換したJSONデータを表示
print(json_data)

上記のコードでは、PythonオブジェクトをJSONデータに変換して、変換したJSONデータを表示しています。実行結果は以下のようになります。

{"name": "tanaka", "age": 30, "city": "New York"}

Pythonでrequestsモジュールを使ったJSONパースの方法

requestsモジュールを使って、Web APIからJSONデータを取得し、パースする方法を解説します。以下は、requestsモジュールを使ってWeb APIからJSONデータを取得し、パースする方法の例です。

import requests
import json
# Web APIのURL
url = 'スクレイピングするサイトのURL'
# Web APIからJSONデータを取得
response = requests.get(url)
# JSONデータをPythonオブジェクトに変換
data = json.loads(response.text)
# パースしたオブジェクトを表示
print(data)

上記のコードでは、requestsモジュールを使ってWeb APIからJSONデータを取得し、jsonモジュールのloads関数を使ってJSONデータをPythonオブジェクトに変換しています。実行結果は以下のようになります。

{
  "userId": 1,
  "id": 1,
  "title": "delectus aut autem",
  "completed": false
}

PythonでのJSONパースの応用例

PythonでのJSONパースの応用例として、以下のようなものがあります。

複数のJSONファイルを読み込み、結合する

以下は、複数のJSONファイルを読み込み、結合する方法の例です。

import json
# 複数のJSONファイル
json_files = [
    'file1.json',
    'file2.json',
    'file3.json'
]
# パースした結果を格納するリスト
data_list = []
# 複数のJSONファイルを読み込み、結合
for json_file in json_files:
    with open(json_file, 'r') as f:
        json_data = f.read()
        data = json.loads(json_data)
        data_list.append(data)
# 結合したデータを表示
print(data_list)

JSONデータをCSVファイルに変換する

以下は、JSONデータをCSVファイルに変換する方法の例です。

import json
import csv
# JSONデータ
json_data = '[{"name": "tanaka", "age": 30, "city": "New York"}, {"name": "suzuki", "age": 25, "city": "Tokyo"}, {"name": "hashimoto", "age": 40, "city": "London"}]'
# JSONデータをPythonオブジェクトに変換
data = json.loads(json_data)
# CSVファイルに書き込む
with open('data.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    # ヘッダー行を書き込む
    writer.writerow(data[0].keys())
    # データ行を書き込む
    for d in data:
        writer.writerow(d.values())

よくあるエラーとその対処法

PythonでJSONをパースする際によくあるエラーとその対処法をまとめます。

JSONDecodeError: Expecting value

JSONデータが正しくない場合、JSONDecodeError: Expecting valueが発生します。以下のようなJSONデータを読み込んだ場合に発生します。

json_data = '{name: "tanaka", age: 30, city: "New York"}'

JSONデータのキーがダブルクォーテーションで囲まれていないため、エラーが発生します。正しいJSONデータは以下のようになります。

json_data = '{"name": "tanaka", "age": 30, "city": "New York"}'

JSONDecodeError: Unterminated string starting at

JSONデータに改行コードが含まれている場合、JSONDecodeError: Unterminated string starting atが発生します。以下のようなJSONデータを読み込んだ場合に発生します。

json_data = '{"name": "tanaka",\n "age": 30,\n "city": "New York"}'

JSONデータに改行コードが含まれているため、エラーが発生します。改行コードを除去するか、JSONデータをファイルに保存して、ファイルを読み込むようにします。

まとめ

本記事では、PythonでJSONをパースする方法について解説しました。基本的なパース方法やrequestsモジュールを使ったパース方法、応用例、よくあるエラーとその対処法について触れました。JSONを扱う際には、jsonモジュールを使ってパースすることができます。また、requestsモジュールを使ってWeb APIからJSONデータを取得し、パースすることもできます。よくあるエラーについても理解し、適切に対処するようにしましょう。