我前言说我只学习Python并查看API和JSON大约一个月,但我也先搜索并且没有立即找到类似的问题对此。
我试图调用一个API(做一个API调用?),它应该返回JSON,但响应看起来像这样:
{
"result":[
[
"Facility Type",
"Facility Name",
"Facility Address",
"ZIP",
"Phone",
"Facility Amenities / Notes",
"Website",
"Latitude",
"Longitude"
],
[
"Parks",
"Boysen Park",
"951 S. State College Blvd.",
"92806",
"714-765-5191",
"Baseball, softball, volleyball, football, soccer, tennis",
"http://www.anaheim.net/comm_svc/parks/parkDetail.asp?dir=park_boysen",
"33.82610235",
"-117.889968814"
],
[
"Parks",
"Citrus Park",
"104 Atchison St.",
"92805",
"714-765-5191",
"Volleyball, basketball",
"http://www.anaheim.net/comm_svc/parks/parkDetail.asp?dir=park_citrus",
"33.836792198",
"-117.906545597"
]
}
这看起来不像我之前遇到过的JSON回复。我习惯了这样的回答(以上面的例子为例):
{
"result": [
[
"Facility Type":"Parks",
"Facility Name":"Boysen Park",
"ZIP":"92806"
]
]
}
这将允许我做一些像......
name1 = response['result']['Facility Name']
...让name1相等" Boysen Park"。
如何对上述回复进行此操作?
(这是我从以下网址获取API / JSON信息的地方:http://anaheim.opendata.junar.com/dataviews/89522/city-parks/)
以下是API请求,以防其他人感兴趣:
http://anaheim.cloudapi.junar.com/api/v2/datastreams/CITY-PARKS-58641/data.ajson/?auth_key=[AUTH_KEY]&limit=5&
答案 0 :(得分:0)
当API像这样响应时,通常意味着格式几乎是固定的,你可能会假设索引访问不会在将来中断。如果格式更改,则通常会创建新端点。 (至少在一个理智的世界里)。
我只是通过索引访问并假设端点的值始终相同,或者使用标题为每个条目创建一个dict。
for i, entry in enumerate(data['result']):
if i == 0:
continue
# Do something with the entry
print(entry)
# You could make a dict
d = dict(zip(data['result'][0], entry))
print(d)
将为第一个条目打印以下内容:
['Parks', 'Boysen Park', '951 S. State College Blvd.', '92806',
'714-765-5191', 'Baseball, softball, volleyball, football, soccer, tennis',
'http://www.anaheim.net/comm_svc/parks/parkDetail.asp?dir=park_boysen',
'33.82610235', '-117.889968814']
{'Facility Type': 'Parks',
'Facility Name': 'Boysen Park',
'Facility Address': '951 S. State College Blvd.',
'ZIP': '92806',
'Phone': '714-765-5191',
'Facility Amenities / Notes': 'Baseball, softball, volleyball, football, soccer, tennis',
'Website': 'http://www.anaheim.net/comm_svc/parks/parkDetail.asp?dir=park_boysen',
'Latitude': '33.82610235',
'Longitude': '-117.889968814'
}
如果您使用dict键(直接)访问,您至少会知道将来是否会发生变化。我还总是添加简单的健全性检查,例如...所有数组实际上都是9号?
从上面的代码进行密钥访问将是:
d['Phone']
d['Website']
同样,您也可以假设代码中包含的字段:
entry[4]
entry[6]
..与第一个例子相同