TypeError:list indices必须是整数,而不是str - API请求

时间:2016-12-13 10:07:26

标签: python list dictionary

我正在尝试返回API响应的不同部分。

我的数据:

{
    "data": [
        "values": [
                     {
                         "value": {
                                      "X": 7544,
                                      "Y": 7532,
                                      "Z": 5298
                                   },
                          "end_time": "2016-11-01"
                      },
                      {
                          "value": {
                                      "X": 7566,
                                      "Y": 7579,
                                      "Z": 5304
                                    },
                           "end_time": "2016-11-02"
                       }
         ]
   ]
}

这是我在致电' data = json_object ['数据']':

时得到的回复
[{'description': 'xxx', 'title': 'yyy', 'values': [{'end_time': '2016-12-01', 'value': {'v1': 187, 'v2': 4}}, {'end_time': '2016-12-02', 'value': {'v1': 177, 'v2': 6}}], 'name': 'name', 'id': '87654/', 'period': ‘day'}]

我的代码:

def myfunc():
    r = requests.get('URL...')
    json_object = r.json()
    data = json_object['data']
    end_time = data[0]['values'][0]['end_time']
    values = data[0]['values'][0]['value']
    return render_template('results.html', date = end_time, result = values)

现在我只获得了第一个值和end_time。所有返回的尝试都以此错误结束:

TypeError: list indices must be integers, not str

请帮忙!

4 个答案:

答案 0 :(得分:0)

您正在寻找的是end_time = data[0](['values'][0]['end_time']) - 现在它正在寻找数据[0] ['值'],这会产生错误值'值&#39 ;是一个字符串。

答案 1 :(得分:0)

基于你的json

values是一个保存类型数组值的键。假设values是父元素,则需要

data["values"][0]['end_time']

答案 2 :(得分:0)

如果您只有一个元素values,那么您可以执行以下操作:

data[0]['values'][0]['end_time']

如果数据对象中有许多项目,则可能需要像这样循环:

for item in data:
    end_time = item['values'][0]['end_time']
    # ...

此外,在values,您有多个项目,要阅读end_time内每个项目的values,您可以这样做:

for item in data:
    for value in item['values']
        end_time = value['end_time']
        # ...

答案 3 :(得分:0)

我很幸运,最后用value['value']遍历该列表中的dict。谢谢大家的帮助!