PythonでHTTPリクエストを送るときに便利なライブラリが requests
です。
その中でも Response.json()
は「レスポンスの中に含まれるJSONデータを取り出す」ための基本メソッドです。
この記事では Response.json()
の基本的な使い方から、活用方法、注意点までをわかりやすく丁寧に解説します。
Response.json() とは?
Response.json()
は、requests.get()
や requests.post()
の戻り値である Responseオブジェクト に定義されているメソッドです。
HTTPレスポンスの中にある「JSON形式のデータ」を辞書型として取り出せます。
たとえばAPIを使ったときに返ってくるレスポンスがJSONだった場合、それを簡単に扱いやすいPythonの形式に変換してくれます。
このメソッドを使うことで、複雑な文字列処理をせずにAPIのデータをそのまま扱えるようになります。
使い方
基本的な使い方
まずは、JSONレスポンスを扱う基本のコードを見てみましょう。
1 2 3 4 5 6 7 |
import requests response = requests.get("https://httpbin.org/json") data = response.json() print(data) |
このコードでは:
https://httpbin.org/json
にGETリクエストを送り、- 返ってきたJSONを
response.json()
で辞書型に変換しています
その結果、Pythonの辞書としてデータをそのまま使うことができます。
具体例:辞書のようにデータにアクセスする
.json()
で取得したデータは辞書型なので、キーを指定して中身を取り出せます。
1 2 3 4 5 6 7 8 9 10 11 |
import requests response = requests.get("https://httpbin.org/json") data = response.json() # 取得したresponse.jsonの例: {"title": "Sample", "author": "Yours Truly"} title = data["title"] author = data["author"] print(title, author) |
このコードでは:
- JSONの中にある
title
とauthor
の2つの値を取得しています - 辞書のキーを直接指定するだけでアクセスできます
- 複数の値を取得したい場合も、
,
ではなくそれぞれのキーを指定して取り出します
具体例:POSTリクエストのレスポンスを処理する
Response.json()
はGETだけでなく、POSTのレスポンスにも使えます。
1 2 3 4 5 6 7 8 9 10 |
import requests response = requests.post( "https://httpbin.org/post", json={"message": "Hello"} ) result = response.json() print(result["json"]) |
このコードでは:
- サーバーにJSONデータを送信
- サーバーから返ってきたJSONレスポンスを
response.json()
で取り出し - その中に含まれる
"json"
フィールドを表示しています
このように送信 → 受信 → 解析まで一連の流れをスムーズに行えます。
Response.json() を使うときの注意点
Response.json()
を使う際にはいくつか注意すべきポイントがあります。
1. レスポンスがJSONでないとエラーになる
レスポンスがJSONでない場合に .json()
を呼ぶと、json.decoder.JSONDecodeError
というエラーが発生します。
1 2 3 4 5 |
import requests response = requests.get("https://example.com") data = response.json() # ← HTMLが返ってくるとエラー |
このような場合に備えて、事前にContent-Typeを確認するか、try〜exceptで囲むのが安全です。
2. ステータスコードのチェックも忘れずに
APIがエラーを返してきた場合でも、.json()
は一見使えてしまうことがあります。
そのため、response.raise_for_status()
でエラーチェックをしたあとに .json()
を使うのが基本です。
1 2 3 4 5 6 7 8 |
response = requests.get("https://httpbin.org/status/500") try: response.raise_for_status() data = response.json() except requests.exceptions.RequestException as e: print("リクエストに失敗しました:", e) |
こうすることで、想定外のレスポンスでも安全に処理できます。