Python读取json响应并附加

时间:2017-10-09 17:08:43

标签: python json request

我已经使用requests模块开发了一个post请求,并且我检索了一个JSON,这是代码

headers_ = {'Authorization': acc_token}
    params_ = (('start_time', '2016-08-01T00:00:00+00:00'),('limit', '2'))

    r = requests.get('https://server.com/API/v1', headers=headers_, params=params_)
    data_ = r.json()
    json_result = (json.dumps(data_, indent=4, sort_keys=False))

这是json结果

{
"loc":[
  {
     "origin":{
        "lat":39.72417,
        "lng":-104.99984,
        "eta_seconds":null,
        "address":""
     },
     "destination":{
        "lat":39.77446,
        "lng":-104.9379,
        "eta_seconds":null,
        "address":null
     }
  },
  {
     "origin":{
        "lat":39.77481,
        "lng":-104.93618,
        "eta_seconds":null,
        "address":"10 Albion Street"
     },
     "destination":{
        "lat":39.6984,
        "lng":-104.9652,
        "eta_seconds":null,
        "address":null
     }
  }

] } 现在我试图将每个json items数组的lat和lng值附加到数组中,我尝试使用此代码

for i in json_result:
        print(i['loc']['origin']['lat'])
        dict.append(i['loc']['origin']['lat'])

但我有这个错误 TypeError:字符串索引必须是整数,而不是str

如何检索数组中每个元素的值lat和lng并附加到dict中?

由于

3 个答案:

答案 0 :(得分:2)

json_result是一个字符串,因为它是json.dumps()的结果。

你完全不需要它。删除整行,并直接在data_上运行。

(作为一个样式点,请停止添加那些不必要的尾随下划线。)

答案 1 :(得分:2)

问题是这个for i in json_result,它将为您keys中的每个json返回。你可以这样做:

for entry in json_result.get('loc'):
    do stuff here....

答案 2 :(得分:0)

只是一个不同的解决方案,如果你仍然收到错误,那么你也可以尝试使用正则表达式来获取lat,lng部分:

import re
convert=str(json_result)

pattern=r"(l([ng]|[at]).'):\s[-]?\d{0,15}.\d{0,15}"

match=re.finditer(pattern,convert)


print([i.group() for i in match])