解析票证时遇到问题。有一个JSON链接包含以下数据:json file
{"success":true,"data":{"AAE":{"2":{"price":48973,"airline":"AF","flight_number":1745,"departure_at":"2018-09-04T18:45:00Z","return_at":"2018-09-14T07:15:00Z","expires_at":"2018-09-02T06:57:21Z"},"3":{"price":67240,"airline":"TP","flight_number":1235,"departure_at":"2018-09-04T07:15:00Z","return_at":"2018-09-14T07:15:00Z","expires_at":"2018-09-02T06:57:21Z"}},"AAH":{"1":{"price":34049,"airline":"LH","flight_number":1453,"departure_at":"2018-09-30T09:05:00Z","return_at":"2018-10-02T07:40:00Z","expires_at":"2018-09-03T11:37:06Z"},"2":{"price":35838,"airline":"LH","flight_number":1453,"departure_at":"2018-09-30T09:05:00Z","return_at":"2018-10-02T11:39:00Z","expires_at":"2018-09-03T11:37:06Z"}},"AAL":{"1":{"price":23258,"airline":"KL","flight_number":904,"departure_at":"2018-12-08T18:00:00Z","return_at":"2018-12-15T06:00:00Z","expires_at":"2018-09-03T13:27:58Z"},"2":{"price":21867,"airline":"AF","flight_number":1745,"departure_at":"2018-12-08T20:00:00Z","return_at":"2018-12-15T18:15:00Z","expires_at":"2018-09-03T13:27:58Z"},"3":{"price":30639,"airline":"AF","flight_number":1145,"departure_at":"2018-12-08T09:45:00Z","return_at":"2018-12-15T06:00:00Z","expires_at":"2018-09-03T13:27:58Z"}},"AAQ":{"0":{"price":5354,"airline":"FV","flight_number":5515,"departure_at":"2018-09-16T04:20:00Z","return_at":"2018-10-04T12:40:00Z","expires_at":"2018-08-31T20:53:40Z"},"1":{"price":8590,"airline":"FV","flight_number":5515,"departure_at":"2018-09-16T04:20:00Z","return_at":"2018-10-04T15:05:00Z","expires_at":"2018-08-31T20:53:40Z"},"2":{"price":13702,"airline":"U6","flight_number":79,"departure_at":"2018-10-04T11:20:00Z","return_at":"2018-10-10T12:40:00Z","expires_at":"2018-09-03T06:47:01Z"}},"AAR":{"1":{"price":24418,"airline":"OK","flight_number":905,"departure_at":"2018-09-19T22:10:00Z","return_at":"2018-09-25T09:35:00Z","expires_at":"2018-09-02T21:16:33Z"},"2":{"price":20805,"airline":"AY","flight_number":712,"departure_at":"2018-09-19T11:50:00Z","return_at":"2018-09-25T16:55:00Z","expires_at":"2018-09-02T21:16:33Z"},"3":{"price":36316,"airline":"BT","flight_number":425,"departure_at":"2018-09-19T09:45:00Z","return_at":"2018-09-25T09:35:00Z","expires_at":"2018-09-02T21:16:33Z"}},
我的代码:
import json
from urllib.request import Request, urlopen
request = Request("http://api.link")
response_body = urlopen(request).read()
tickets = json.loads(response_body)
for item in tickets['data']:
price = item['AAL']['1']['price']
print(price)
我尝试了各种方案来获得价格的价值,但没有发生任何事情。
帮助我获得这个价值
我没有尝试使用您(最终)在您的问题中添加的原始数据 - 尽管仍然没有我建议的文本。相反,我手动输入(并修复了)您最初发布的图像中显示的片段(并修复了格式)。
无论如何,以下内容至少应该是关闭的,并向您展示如何访问数据结构的各个部分:
response_body = '''
{
"success": true,
"data": {
"AAL": {
"1": {
"price": 53411,
"airline": "KL",
"flight_number": 904,
"departure_at": "2018-08-31T17:00:002",
"return_at": "2018-09-01T18:20:002",
"expires_at": "2018-08-31T17:00:OOZ"
},
"2": {
"price": 56035,
"airline": "BT",
"flight_number": 429,
"departure_at": "2018-08-31T15:25:002",
"return_at": "2018-09-01To6:35:002",
"expires_at": "2018-08-31T15:25:OOZ"
}
},
"AAQ": {
"0": {
"price": 6242,
"airline": "DP",
"flight_number": 147,
"departure_at": "2018-09-15T21:00:002",
"return_at": "2018-10-05T12:40:002",
"expires_at": "2018-09-03T13:18:222"
}
}
}
}'''
处理数据的代码:
import json
tickets = json.loads(response_body)
for airport, flights in tickets['data'].items():
print('airport:', airport)
for id, flight in flights.items():
print(' id:', id)
print(' airline:', flight['airline'])
print(' flight_number:', flight['flight_number'])
print(' price:', flight['price']) # Here's how to get the price.
我认为这些“1”和“2”是list
而不是dict
的项目。你需要迭代它们。尝试像这里处理:
import json
from urllib.request import Request, urlopen
request = Request("http://api.link")
response_body = urlopen(request).read()
tickets = json.loads(response_body)
for key, items in tickets['data'].items():
for item in items:
price = item['price']
print(price)
它是在for循环中将项目转换为字符串。所以当你调用['1']时它会抛出一个错误,就好像你把它设置为一个整数,即[1]它会带回键的第二个字符,在这种情况下'A'来自' AAL”。如果你修改它以满足你的需要,这将工作。
import json
from urllib.request import Request, urlopen
request = Request("http://api.travelpayouts.com/v1/prices/cheap?origin=MOW&page=1& token=77e84779fa444c14806f022f6c41b7fe")
response_body = urlopen(request).read()
tickets = json.loads(response_body)
for item in tickets['data']:
if item == 'AAL':
price = tickets['data'][item]['1']['price']
print(price)