解析此JSON格式 - 键列出一次,多个值

时间:2017-06-10 21:56:40

标签: python json

我前言说我只学习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&

1 个答案:

答案 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]

..与第一个例子相同