Python で URL から 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, 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, 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
コードキーを渡す必要があります。