解析JSON列表

时间:2019-05-23 03:31:08

标签: python json

我有这个json对象,我是否正在尝试解析以从location_info获取位置,所以有一个ID和一个书面名称。

{
"data": [
{
"id": 419,
"language": 1,
"size": "25.8 MB",
"title": "random title",
"location_info": "{\"168\": \"location one\"}",
"description": "Convallis aenean luctus dictum nullam tempus mi non, senectus dictumst sapien eget eros in inceptos nec, luctus suscipit libero fermentum litora hac.",
},
{
"id": 429,
"language": 1,
"size": "2.8 MB",
"title": "Lobortis est lacus nostra scelerisqu",
"location_info": "{\"169\": \"location two\"}",
"description": "Ipsum conubia consectetur magna ad ullamcorper habitant",
},
{
"id": 412,
"language": 1,
"size": "5.8 MB",
"title": "proin convallis lobortis ligula purus ",
"location_info": "{\"169\": \"location two\", \"168\": \"location one\"}",
"description": "purus ultrices sed bibendum placerat non semper phasellus per vehicula leo id feugiat faucibus.",
},
],
"total": 3,
"total_found": 10
}

这是我的小测试代码,我正在使用

with open('json1.json') as f:
  jsonResponse = json.load(f, "UTF-8")

  jsonData = jsonResponse["data"]
  for item in jsonData:
    print ("%s  Len %s") % (item.get('location_info'), len(item.get('location_info')))


{u'168': u'location one'}  Len 1
{u'169': u'location two'}  Len 1
{u'169': u'location two', u'168': u'location one'}  Len 2

我可以得到列表的长度,可以是1或2,也可以是整个字符串。但是我不能只获得位置名称,也不能获得ID号。

如果我尝试仅将字符串的第一部分作为列表

print (item.get('location_info')[0])

我刚收到键盘错误:0返回

我想要的是能够以一种易于处理的方式获取位置ID和名称。是的,可以有多个位置。

2 个答案:

答案 0 :(得分:2)

您的json中的location_info字段实际上是一个嵌入的json字符串:

"location_info": "{\"168\": \"location one\"}",  # <- that's a string

json解析器不会递归解析此类内容。您需要先解析它,然后才能使用它:

for item in jsonData:
    location = json.loads(item.get('location_info1', '{}'))
    print(location.keys()) # NOW location is a dictionary

打印:

dict_keys(['168'])
dict_keys(['169'])
dict_keys(['169', '168'])

答案 1 :(得分:1)

item.get('location_info')是这里的字典

您必须使用ID(“ 168”或“ 169”)代替索引(0或1)。

要在每个location_info中显示data,您可以执行以下操作:

for item in jsonData:
    # for ID in item['location_info'] returns every `key` in location_info
    for ID in item['location_info']:
        print(ID, item['location_info'][ID])