はじめに
本記事では、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データを取得し、パースすることもできます。よくあるエラーについても理解し、適切に対処するようにしましょう。