用于检查单个或多个子节点的python JSON

时间:2016-07-05 23:10:30

标签: python json dictionary

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

结果dict如下所示“

{ u'queueId': u'channel.presence' u'name': u'presence.message' u'timestamp': 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'timestamp': 1467756452665 u'webhookId': u'U3P3Xw' u'serial': u'e7da73f968767379:40' u'data': {
u'channelId': u'private-a012a914cce6096c4a02a29da51dbc58' u'site': u'eu-central-1-A' u'presence': [ { u'timestamp': 1467756404550 u'connectionId': u'LA84hfOd_w' u'clientId': u'a012a914cce6096c4a02a29da51dbc58' u'action': 3 u'data': u'a012a914cce6096c4a02a29da51dbc58' u'id': u'LA84hfOd_w-2:0' } ] } },

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

我对此的测试完全失败,但有例外:

Error: list indices must be integers, not str

我的代码: for ji in json_data['items']: channel_id = ji['data']['channelId'] logger.debug("ChannelID: %s" % channel_id) found_special_case = False if len(ji['data']['presence']) > 1 : for ch in ji['data']['presence']: ...

不幸的是,当只有一个项目时,支票len(ji['data']['presence']) > 1也是如此。在这种情况下,ch变为'action'而不是子项。

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

1 个答案:

答案 0 :(得分:2)

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

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:
    # ...