2016-07-05 7 views
0

python2.7を使用していて、解析する必要のあるJSON文字列を動的に受け取っています。python JSONで単一または複数の子があるかどうかを確認する

あなたは[データ] [プレゼンス]は単に1つのオブジェクトまたは複数のオブジェクトのいずれかを有することができる例のデータからわかるように、「

{ 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' } ] } },

を次のように結果のdictが見えます。

そのための私のテストでは、例外を除いて全く失敗:

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']: ...

不幸にも、チェック項目が1つしかない場合は、len(ji['data']['presence']) > 1が該当します。その場合、chは子アイテムの代わりに「アクション」になります。

辞書に1つまたは複数の項目があるかどうかを確認するにはどうすればよいですか?

は商品がリストされているかどうかを判断するために isinstance()を使用することができます
+0

何:私が正しくあなたを理解すれば、これはあなたが探しているロジック

presence = ji['data']['presence'] if isinstance(presence, list): # ... 

けれどもありますあなたが投稿されたが有効ではない、あなたは有用なサンプルを投稿できますか? –

答えて

1

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

for ch in presence: 
    # ... 
+0

それは意味があります。ありがとうございました ! – Richard

+0

ほぼ200Kで! –

+0

@PadraicCunninghamありがとう、それはまだ遠く離れていると感じています:)そして、あなたはそうだからすべてのスワッグにとても近づいています:) – alecxe

関連する問題