### This line works fine
health_data_json = resp.json()["data"]["metrics"]
### This line produces "TypeError: list indices must be integers or slices, not str"
energy_data_json = resp.json()["data"]["metrics"]["basal_energy_burned"]
### This line works fine
steps_data_json = resp.json()["data"]["metrics"][1]
### Also works fine
steps_data_json2 = resp.json()["data"]["metrics"][1]["data"]
我试图更好地理解如何在Python中正确地访问数据,发现我有时会收到错误消息,与其他看起来相似/相同但不产生错误的代码行相比,我真的不明白为什么。我提供了上面的一些代码片段来读取JSON文件。在第一行中,我可以使用两次字段名称来返回JSON的特定部分。
但是当我尝试进入第三层时,我就不能再这样做了,必须使用整数索引来提取数据。然后我再次能够在第四层成功地使用name字段来检索JSON的另一部分。
为什么会出现这种情况,避免/防止这种情况的最佳方法是什么?
编辑:
感谢到目前为止所有有用的评论,我想分享JSON的一个片段,以寻求更好的方式访问数据的建议,而不是在格式发生变化的情况下通过数字索引,有没有一种方法可以利用这里显示的名称字段:
{
"data" : {
"metrics" : [
{
"units" : "kcal",
"name" : "basal_energy_burned",
"data" : [
{
"date" : "2022-01-01 00:00:00 -0800",
"source" : null,
"qty" : 2254.3233141492697
},
1条答案
按热度按时间yyyllmsg1#
resp.json()["data"]["metrics"]
是一个列表。因此,不能将索引["basal_energy_burned"]
应用于它。必须使用像[1]
这样的数字索引。我认为这里真实的的问题是为什么你 * 期望 * 它是其他的。是的,第一和第二级别的项目是字典,但那又怎样?网站可以自由地以任何格式返回响应。