【问题标题】:Parse json in python when as dict when only one "node"当只有一个“节点”时在python中解析json作为dict
【发布时间】:2019-11-30 18:49:50
【问题描述】:

当我要查找的内容有多个“节点”时,我能够解析 json 响应,但是当 API 仅返回一个节点时,我收到消息“字符串索引必须是整数”。 这是我的代码,我在使用 json.loads() 从字符串转换后传入字典:

import requests, requests.auth
import json
import os

def parseSchedule(dict):
    i = 0
    for item in dict['reservations']['reservation']:
        print(item['event_start_dt'])
        i += 1

我已经简化了 json 响应以表明这是可行的:

    {
    "reservations": {
        "reservation": [{
            "event_start_dt": "2019-11-27T12:40:00-08:00"
        }, {
            "event_start_dt": "2019-11-27T16:10:00-08:00"
        }]
    }
}

虽然这会引发错误“字符串索引必须是整数”:

    {
    "reservations": {
        "reservation": {
            "event_start_dt": "2019-11-26T08:30:00-08:00"   
        }
    }
}

我研究了 .items() ,我在其中尝试了键和值,但到目前为止还没有成功。

【问题讨论】:

  • 但在第二种情况下,您不需要循环,只需dict['reservations']['reservation']['event_start_dt']
  • 实际上我确实需要一个循环,因为我不知道每天我会得到多少回报——有时只有一个,但很可能是多个回报..
  • 拥有一个有时是列表有时是字典的数据结构是没有意义的。
  • @ProgrammerBret 我的回答对你有用吗?
  • 确实——非常感谢

标签: python json python-requests python-responses


【解决方案1】:

你可以这样做:

#If it is a list:
if str(type(dict["reservations"]["reservation"])) == "<class 'list'>":
    for i in range(len(dict["reservations"]["reservation"])):
        print(dict["reservations"]["reservation"][i]["event_start_dt"])
else: #If it is not a list
    print(dict['reservations']['reservation']['event_start_dt'])

【讨论】:

  • 是的,这行得通——我最终使用 isinstance 方法检查它是在研究之后是列表还是字典.. 非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 2021-05-24
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多