我有这个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和名称。是的,可以有多个位置。
答案 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])