python JSON用于dict检查是单个还是多个子项

python JSON用于dict检查是单个还是多个子项,python,json,dictionary,Python,Json,Dictionary,我正在使用python2.7并动态接收需要解析的JSON字符串 生成的dict如下所示“ { u'queueId':u'channel.presence' u'name':u'presence.message' u“时间戳”:1467756404358 u'webhookId':u'U3P3Xw' u'serial':u'e7da73f968767379:37' u'data':{ u'channelId':u'private-cc-259970d91ab44af38393130e95de705

我正在使用python2.7并动态接收需要解析的JSON字符串

生成的dict如下所示“

{
u'queueId':u'channel.presence'
u'name':u'presence.message'
u“时间戳”:1467756404358
u'webhookId':u'U3P3Xw'
u'serial':u'e7da73f968767379:37'
u'data':{
u'channelId':u'private-cc-259970d91ab44af38393130e95de7057' u'site':u'eu-central-1-A' u'presence':{
u'action':u'enter' u'connectionId':u'LA84hfOd_w' u'data':u'a012a914cce6096c4a02a29da51dbc58' u'clientId':u'a012a914cce6096c4a02a29da51dbc58' } } }, { u'queueId':u'channel.presence' u'name':u'presence.message' u“时间戳”:146775452665 u'webhookId':u'U3P3Xw' u'serial':u'e7da73f968767379:40' u'data':{
u'channelId':u'private-a012a914cce6096c4a02a29da51dbc58' u'site':u'eu-central-1-A' 你的存在:[ { u“时间戳”:1467756404550 u'connectionId':u'LA84hfOd_w' u'clientId':u'a012a914cce6096c4a02a29da51dbc58' 行动:3 u'data':u'a012a914cce6096c4a02a29da51dbc58' u'id':u'LA84hfOd_w-2:0' } ] } },

从示例数据中可以看出,[data][presence]可以只有一个对象,也可以有多个对象

我的测试完全失败,只有一个例外:

错误:列表索引必须是整数,而不是str

我的代码:

对于json_数据['items']中的ji:
通道id=ji['data']['channelId']
logger.debug(“通道id:%s”%channel\u id)
发现特殊情况=错误
如果len(ji['data']['presence']]>1:
对于CHIN ji[“数据”][“存在”]:
...

不幸的是,当只有一项时,检查
len(ji['data']['presence'])>1也为真。在这种情况下,
ch
变成了“action”,而不是子项

如何检查字典中是否有单个或多个项目?

您可以使用来确定该项目是否为列表:

presence = ji['data']['presence']
if isinstance(presence, list):
    # ...
不过,如果我理解正确的话,这就是你要寻找的逻辑:

presence = ji['data']['presence']
if isinstance(presence, dict):  # or: if not isinstance(presence, list):
    presence = [presence]

for ch in presence:
    # ...

你发布的内容是无效的,你能发布一个可用的样本吗?好吧,这很有意义。谢谢你!@PadraicCunningham谢谢,它仍然感觉很遥远:)而且你离所有的swags都很近:)我从来没有想到我会接近10万,当你从1开始的时候,似乎还有很长的路要走,但上瘾会有所帮助。我发誓在10万之后,我会砍掉b尽管如此:D@PadraicCunningham上瘾肯定会有帮助。我认为我们需要专业帮助-是否有一个stackexchange网站可以帮助其他上瘾的人?@alecxe,希望没有,这可能只是用一种上瘾取代另一种:)