JSONファイルの読み書き、エラーが出て「またか…」とため息をついていませんか?手作業でデータを整形したり、APIからのレスポンスを一つずつ確認したりするの、本当に面倒ですよね。
分かります。そのイライラ、私も経験済みです。
でも安心してください!Pythonを使えば、そんな面倒な作業はあっという間に解決できます。この記事では、初心者の方でもコピペでサクッと使えるJSONファイルの読み書き方法を解説します。これをマスターすれば、API連携の基礎もバッチリ!今日からあなたも「楽するエンジニア」の仲間入りです。
JSONって何?
「JSONってよく聞くけど、結局何?」そう思っている方もいるかもしれませんね。
JSON(JavaScript Object Notation)は、データ交換によく使われる軽量なデータ形式です。人間が読んでも分かりやすく、コンピューターが処理するのも簡単、という特徴があります。
イメージとしては、Pythonの「辞書(dict)」や「リスト(list)」にとても似ています。
- キーと値のペアでデータを表現
{ "name": "太郎", "age": 30 } - データのリストを表現
[ "Apple", "Banana", "Orange" ]
主にWeb APIなどでデータをやり取りする際に使われることが多く、現代のアプリケーション開発には欠かせない存在です。
PythonでJSONを扱うための準備
PythonでJSONを扱うのはとても簡単です。特別なライブラリのインストールは不要!Pythonに標準で組み込まれているjsonモジュールを使います。
まずは、Pythonのコードの先頭に以下の一行を追加するだけです。
python
import json
これで準備完了!次に具体的な読み書きの方法を見ていきましょう。
【実践】JSONファイルを読み込んでみよう!
まずは、既存のJSONファイルをPythonで読み込む方法から解説します。
1. サンプルJSONファイルを用意する
以下の内容をsample.jsonという名前で保存してください。
json
{
"name": "山田太郎",
"age": 28,
"city": "東京",
"hobbies": ["読書", "プログラミング", "料理"],
"is_active": true,
"email": null
}
2. JSONファイルを読み込むPythonコード
以下のコードを同じフォルダにread_json.pyとして保存し、実行してみてください。
“`python
read_json.py
import json
読み込むJSONファイルのパス
file_path = ‘sample.json’
ファイルを開いてJSONデータを読み込む
try:
with open(file_path, ‘r’, encoding=’utf-8′) as f:
data = json.load(f)
print("JSONファイルを読み込みました!")
print(data)
print(f"データの型: {type(data)}")
# 読み込んだデータにアクセスしてみよう
print(f"名前: {data['name']}")
print(f"年齢: {data['age']}")
print(f"趣味: {data['hobbies'][0]}")
except FileNotFoundError:
print(f”エラー: ‘{file_path}’ が見つかりませんでした。ファイル名を確認してください。”)
except json.JSONDecodeError as e:
print(f”エラー: JSONの形式が正しくありません。詳細: {e}”)
except Exception as e:
print(f”予期せぬエラーが発生しました: {e}”)
“`
実行結果例
JSONファイルを読み込みました!
{'name': '山田太郎', 'age': 28, 'city': '東京', 'hobbies': ['読書', 'プログラミング', '料理'], 'is_active': True, 'email': None}
データの型: <class 'dict'>
名前: 山田太郎
年齢: 28
趣味: 読書
コード解説
import json: Pythonに標準で搭載されているjsonモジュールをインポートしています。file_path = 'sample.json': 読み込みたいJSONファイルのパスを指定します。with open(file_path, 'r', encoding='utf-8') as f::open()関数でファイルを開きます。'r'は「読み込み(read)モード」であることを示します。encoding='utf-8'は、日本語などの文字を正しく処理するための指定です。これを指定しないと文字化けすることがあります。withを使うと、ファイルの開閉を自動で行ってくれるので、閉じ忘れの心配がなく安心です。
data = json.load(f):json.load()がJSONファイルをPythonのデータ構造(辞書やリスト)に変換する役割を担っています。この変換処理を「デシリアライズ」と呼びます。
これで、JSONファイルの中身がPythonで扱いやすい辞書やリストとしてdata変数に入りました。あとは通常のPythonデータと同じように、キーを指定して値にアクセスできます。
【実践】PythonのデータをJSONファイルに書き込んでみよう!
次に、Pythonのデータ(辞書やリスト)をJSONファイルとして保存する方法です。
1. PythonデータをJSONファイルに書き込むコード
以下のコードをwrite_json.pyとして保存し、実行してみてください。
“`python
write_json.py
import json
Pythonの辞書データを用意
python_data = {
“product_name”: “スマートウォッチ”,
“price”: 15000,
“available”: True,
“colors”: [“ブラック”, “シルバー”, “ピンク”],
“specs”: {
“display”: “AMOLED”,
“battery_life”: “7 days”
}
}
書き込むJSONファイルのパス
output_file_path = ‘output.json’
ファイルを開いてPythonデータをJSON形式で書き込む
try:
with open(output_file_path, ‘w’, encoding=’utf-8′) as f:
# json.dump()を使って書き込む
# indent=4: JSONを見やすく整形(インデント4スペース)
# ensure_ascii=False: 日本語がそのまま表示されるようにする
json.dump(python_data, f, indent=4, ensure_ascii=False)
print(f"Pythonデータを'{output_file_path}'に書き込みました!")
except Exception as e:
print(f”エラーが発生しました: {e}”)
“`
実行結果例
特にエラーメッセージが出なければ成功です。同じフォルダにoutput.jsonというファイルが生成されます。
output.jsonの中身は以下のようになっているはずです。
json
{
"product_name": "スマートウォッチ",
"price": 15000,
"available": true,
"colors": [
"ブラック",
"シルバー",
"ピンク"
],
"specs": {
"display": "AMOLED",
"battery_life": "7 days"
}
}
コード解説
python_data = { ... }: JSONとして保存したいPythonの辞書データを作成します。with open(output_file_path, 'w', encoding='utf-8') as f::'w'は「書き込み(write)モード」であることを示します。もし指定したファイルが存在しない場合は新規作成され、存在する場合は上書きされますので注意してください。encoding='utf-8'は読み込み時と同様、文字化け防止のためです。
json.dump(python_data, f, indent=4, ensure_ascii=False):json.dump()がPythonのデータをJSON形式に変換し、ファイルに書き込む役割を担っています。この変換処理を「シリアライズ」と呼びます。indent=4: JSONファイルは通常、1行にまとめて書かれますが、これでは人間には読みにくいです。indent引数に数値を指定すると、その数だけスペースを空けて整形してくれます。今回の例では4スペースでインデントしています。ensure_ascii=False: これを指定しないと、日本語などの非ASCII文字が\u30b9\u30de\u30fc\u30c8のようにエスケープされて書き込まれてしまいます。Falseにすることで、日本語がそのままの形で保存され、ファイルが見やすくなります。
【応用】文字列としてJSONデータを扱う (loadsとdumps)
ここまではファイルとしてJSONを読み書きする方法でしたが、時にはファイルではなく「Pythonの文字列」としてJSONデータを扱いたい場面があります。例えば、Web APIからのレスポンスが直接JSON形式の文字列として返ってくる場合などです。
そんなときに役立つのがjson.loads()とjson.dumps()です。
json.loads(): JSON形式の文字列をPythonのデータ(辞書やリスト)に変換します。(load string)json.dumps(): PythonのデータをJSON形式の文字列に変換します。(dump string)
名前にsが付いているのが特徴です。
“`python
import json
1. JSON形式の文字列をPythonデータに変換 (loads)
json_string_input = ‘{“user_id”: 101, “username”: “田中”, “is_admin”: false}’
data_from_string = json.loads(json_string_input)
print(“— JSON文字列からPythonデータへ —“)
print(“変換されたデータ:”, data_from_string)
print(“データの型:”, type(data_from_string))
print(“ユーザー名:”, data_from_string[‘username’])
2. PythonデータをJSON形式の文字列に変換 (dumps)
python_data_to_string = {
“event”: “page_view”,
“timestamp”: “2023-10-27T14:30:00Z”,
“page_url”: “/products/detail/123”,
“user”: {“id”: 202, “country”: “JP”}
}
indentとensure_asciiはdumpと同様に使える
json_string_output = json.dumps(python_data_to_string, indent=2, ensure_ascii=False)
print(“\n— PythonデータからJSON文字列へ —“)
print(“変換された文字列:\n”, json_string_output)
print(“文字列の型:”, type(json_string_output))
“`
実行結果例
“`
— JSON文字列からPythonデータへ —
変換されたデータ: {‘user_id’: 101, ‘username’: ‘田中’, ‘is_admin’: False}
データの型: <class ‘dict’>
ユーザー名: 田中
— PythonデータからJSON文字列へ —
変換された文字列:
{
“event”: “page_view”,
“timestamp”: “2023-10-27T14:30:00Z”,
“page_url”: “/products/detail/123”,
“user”: {
“id”: 202,
“country”: “JP”
}
}
文字列の型: <class ‘str’>
“`
json.load() / json.dump() と json.loads() / json.dumps() の違いまとめ
| 関数名 | 役割 | 対象 |
| :————- | :—————————————– | :———– |
| json.load() | JSONファイル → Pythonデータ | ファイル |
| json.dump() | Pythonデータ → JSONファイル | ファイル |
| json.loads() | JSON文字列 → Pythonデータ | 文字列 |
| json.dumps() | Pythonデータ → JSON文字列 | 文字列 |
どちらも「Pythonデータ ⇔ JSON」の変換を行うことに変わりはありませんが、ファイルと直接やり取りするか、それとも文字列として扱うか、という違いです。
なぜJSONファイルの読み書きがAPI連携の基礎なの?
ここまでJSONファイルの読み書きを学んできましたが、「これがなぜAPI連携の基礎なの?」と思うかもしれません。
実は、Webの世界ではAPI(Application Programming Interface:プログラム同士が情報をやり取りするための窓口)からのデータ形式として、JSONが圧倒的に多く使われています。
例えば、
- 天気予報APIから現在の天気情報をJSON形式で受け取る
- SNSのAPIから特定のユーザーの投稿履歴をJSON形式で取得する
- 自社のシステムから別のシステムへ、処理結果のデータをJSON形式で送信する
といった場面で、今日学んだ知識がそのまま役立ちます。APIから受け取ったJSON形式の文字列をjson.loads()でPythonデータに変換して処理したり、Pythonで作ったデータをjson.dumps()でJSON形式の文字列にしてAPIに送ったりするわけです。
JSONの読み書きは、Pythonを使ったWebスクレイピングやWebアプリケーション開発、そして様々なシステムの自動連携において、まさに「土台」となる非常に重要なスキルです!
まとめ
お疲れ様でした!この記事では、Pythonを使ったJSONファイルの読み書きについて、初心者の方でもコピペで使えるように解説しました。
- JSONはデータ交換によく使われる、人間にもコンピューターにも分かりやすいデータ形式です。
- Pythonの
jsonモジュールを使えば、JSONファイルを簡単に読み書きできます。 json.load()とjson.dump()でファイルを、json.loads()とjson.dumps()で文字列を扱います。indent=4で整形、ensure_ascii=Falseで日本語をきれいに表示できます。- JSONの読み書きは、Web APIと連携する上で必須の基礎スキルです。
これであなたもJSONファイルを自在に操れるようになったはずです。最初はコピペからで大丈夫!慣れてきたら、ぜひ色々なAPIと連携して、業務効率化の幅を広げてみてください。きっと「もっと早くやればよかった!」と思うくらい、楽になるはずです。
応援しています!

コメント