【问题标题】:TypeError: list indices must be integers or slices, not str while parsing JSONTypeError:列表索引必须是整数或切片,而不是解析 JSON 时的 str
【发布时间】:2016-02-16 03:18:51
【问题描述】:

我试图从返回的 Json 中打印出至少一个键值,如下this basic tutorial

response=None    
booking_source = 'sourceBusinessName'
api_request ='http://api.com'
r = requests.get(api_request)
while response is None:
    response = r.content.decode('utf-8')
    data = json.loads(response)
    print (data[booking_source])
    return HttpResponse(data[booking_source])

但它返回TypeError: list indices must be integers or slices, not str 可能是因为我在打印时给data 提供了一个字符串而不是一个整数,但是我在这里做错了什么?

【问题讨论】:

  • 您假设 JSON 在顶层有一个对象。
  • if (booking_source) in data:print (data[booking_source])...可能会更好
  • 解析时如何访问数组?

标签: python json


【解决方案1】:

使用requests,您可以跳过响应的解码并使用响应的json 方法将其解析为JSON:

r = requests.get(api_request)
data = r.json()
print data    # so you can see what you're dealing with

此时我建议将data 的值转储出来,以便您可以看到JSON 数据的结构。可能它是一个 JSON 数组(转换为 Python 列表),您只需在访问字典之前获取该数组的第一个元素,但如果不查看实际数据就很难分辨。您可能希望将数据样本添加到您的问题中。

【讨论】:

  • 是的,它是一个对象数组。那你怎么先访问数组呢?
  • @xavier:使用整数下标或切片,例如data[0] 将为您提供列表的第一项。可能data[0] 会给你你所期望的字典...不能不看就知道。
【解决方案2】:

您的 JSON 是一个顶级数组,但您试图将其处理为:

{
  "sourceBusinessName": {
    ...
  },
  ...
}

【讨论】:

  • 谢谢,那么问题来了,如何访问数组?
  • 我们能看到你的 JSON 吗?在您的示例中,它将是 data[0]、data[1] 等。
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 2017-11-19
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
  • 2021-11-28
相关资源
最近更新 更多