HOWTO · Python
Python で URL から JSON を取得する
このチュートリアルでは、Python の組み込みモジュールを使用して、JSON データを取得、解析、およびアクセスする方法を説明します。
このページの内容
URL を使用して Web サーバーからデータを取得する場合は常に、そのデータは特定の形式である必要があります。一般に、Web サーバーからデータをフェッチする場合は常に、JSON 形式または XML 形式のいずれかを使用します。
ソフトウェア業界で非常に人気が高まっているため、JSON は XML よりも優先されます。Python には、JSON を処理するためのさまざまなライブラリがあります。
このチュートリアル全体を通して、Python で利用可能な json および requests モジュールを使用します。
フェッチする JSON データは以下の URL からのものです。この URL を使用すると、名前、電子メール、住所など、ユーザーに関連するすべてのデータを取得できます。無料で使用できます。
https://jsonplaceholder.typicode.com/users
Restful API の観点から、URL はエンドポイントと呼ばれます。このチュートリアル全体を通して、これら 2つの単語を同じ意味で使用します。上記の URL で、/users はエンドポイントを指します。
上記の URL をブラウザで開くと、ユーザーに関連するすべてのデータが JSON 形式で表示されます。以下に示します。
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
]
上記のコードブロックでは、1 人のユーザーに関連する JSON データのみを示していることに注意してください。これは説明のためだけのものです。ただし、URL にアクセスすると、すべてのユーザーのデータが表示されます。
JSON は JavaScript Object Notation を指します。サーバーとクライアント間でデータを送受信するために使用され、その逆も同様です。ここで、JavaScript という言葉と混同しないでください。JSON はプログラミング言語に依存しません。JSON では、2 種類の角かっこを使用してデータをフォーマットします。1つは配列またはリストを表す角括弧 [] で、もう 1つはオブジェクトを表す中括弧 {} です。
JSON 内のデータは、常に引用符""内の key-value ペアの形式になります。したがって、任意の値にアクセスする場合は、その値に関連付けられているキーを使用する必要があります。たとえば、上記の JSON データからユーザーの名前にアクセスするとします。キーname を使用して、最初のユーザーの名前である値 Leanne Graham を取得します。また、JSON ではコメントを許可しないことに注意してください。
Python で JSON データを取得してアクセスする
まず、データを取得してアクセスするために、requests モジュールと json モジュールをインポートする必要があります。
import requests
import json
URL から文字列へのデータの取得と変換
ここで実行する必要がある最初のステップは、requests ライブラリを使用して JSON データをフェッチすることです。
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
print(type(text))
出力:
<class 'str'>
requests ライブラリには、パラメータとして URL を受け取り、指定された URL に GET リクエストを送信する get() というメソッドがあります。サーバーから取得した応答は、url という変数に格納されます。
url 変数内に格納されているこの応答は、.text メソッドを使用して url.text として文字列に変換する必要があります。次に、結果を text 変数に格納します。text 変数のタイプを出力すると、タイプは <class 'str'> になります。
JSON データを解析する
解析は、文字列データを JSON 形式に変換するプロセスです。そのために、json モジュールを使用します。
data = json.loads(text)
print(type(data))
出力:
<class 'list'>
json モジュールには loads() と呼ばれるメソッドが付属しています。loads() の s は文字列を表します。文字列データを JSON に変換したいので、このメソッドを使用します。このメソッド内で、文字列データ json.loads(text) を含む text 変数を渡し、それを data 変数内に格納する必要があります。
これで、データに JSON 応答全体が含まれるようになります。data 変数の型を出力すると、タイプ <class 'list'> になります。この場合、JSON 応答は角かっこ [] で始まり、Python ではリストは角かっこで始まります。角かっこ。
JSON データにアクセスする
JSON データを解析したので、data 変数を使用して必要な個々の値にアクセスする準備が整いました。名前や住所など、最初のユーザーの詳細にアクセスするには、次のようにします。
import json
import requests
url = requests.get("https://jsonplaceholder.typicode.com/users")
text = url.text
data = json.loads(text)
user = data[0]
print(user["name"])
address = user["address"]
print(address)
出力:
Leanne Graham
{'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}
ユーザーのリストから最初のユーザーにアクセスするには、JSON データの 0 インデックスを使用する必要があります。これは data という変数内に格納され、次にその詳細全体を最初に user 内に格納します。変数。これで、この users は、そのユーザーに関連するすべての詳細を含むオブジェクトになります。名前にアクセスするには、user['name'] のような user 変数内に name キーを渡してから出力する必要があります。コンソール内にユーザーの名前が出力されます。
また、アドレスにアクセスするには、ユーザー変数内の address キー、つまり user['address'] を渡し、それを address という変数内に格納してから出力する必要があります。これにより、アパート番号、通りの名前、郵便番号など、住所フィールドに関連するすべての特定の詳細を含むオブジェクトが提供されます。これらの詳細から、ユーザーの zipcode のみが必要だとしましょう。次に、address オブジェクト内に zipcode コードキーを渡す必要があります。