python JSON用于dict检查是单个还是多个子项
我正在使用python2.7并动态接收需要解析的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
{
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,希望没有,这可能只是用一种上瘾取代另一种:)