2017-01-30 7 views
1

私は、次のdictがありますトラブルアクセスするPythonの辞書要素

b = {None: u'{"TimeStamp":"2017-01-30T13:50:22.3854765+00:00","RealEstate":   {"Id":"fa9ba4d0-3e69-46f0-9460-05d6b2ff1211","Name":"Building 1","Room":"Room  1","Device":{"Id":"fa9ba4d0-3e69-46f0-9460-08d6b2ff6408","Payload":{"Temperature":{"Unit":"C","Value":32.3},"Humidity":{"Unit":"%","Value":12},"Light":{"Unit":"lux","Value":154},"Motion":{"Unit":"Number of motion","Value":0},"Co2":null}}},"Message":null}'} 

そして、カントのアクセス任意の要素を。

ERROR: ..../sparkstream.py", line 24, in test 
    c = b['u'] 

KeyError例外:すべてが生成するb['None']b['u']b['TimeStamp']両方試しました 'U' は

任意のヒントを!

+2

助け 'u'辞書、'なしの**キー**ではありません'です。したがって、 'b [なし]'でアクセスすることができます。 –

答えて

2

あなたはb[None]で値にアクセスできる1つのキーを持つ辞書を持っていますか?この値は、文字列であり、辞書ではありません。辞書を得るために、あなたはそれを復号化するためにJSONを使用する必要があります:

import json 

b = {None: u'{"TimeStamp":"2017-01-30T13:50:22.3854765+00:00","RealEstate":   {"Id":"fa9ba4d0-3e69-46f0-9460-05d6b2ff1211","Name":"Building 1","Room":"Room  1","Device":{"Id":"fa9ba4d0-3e69-46f0-9460-08d6b2ff6408","Payload":{"Temperature":{"Unit":"C","Value":32.3},"Humidity":{"Unit":"%","Value":12},"Light":{"Unit":"lux","Value":154},"Motion":{"Unit":"Number of motion","Value":0},"Co2":null}}},"Message":null}'} 
dict_object = json.loads(b[None]) 
print json.dumps(dict_object, indent=2) # Show the decoded result 

# Accessing some keys 
print '---' 
print 'Time stamp:', dict_object['TimeStamp'] 
print 'Real Estate ID:', dict_object['RealEstate']['Id'] 
print 'Device ID:', dict_object['RealEstate']['Device']['Id'] 

出力:あなたは1つのキーだけ、タイプなしのオブジェクトを持っている共有

{ 
    "TimeStamp": "2017-01-30T13:50:22.3854765+00:00", 
    "Message": null, 
    "RealEstate": { 
    "Device": { 
     "Id": "fa9ba4d0-3e69-46f0-9460-08d6b2ff6408", 
     "Payload": { 
     "Motion": { 
      "Value": 0, 
      "Unit": "Number of motion" 
     }, 
     "Light": { 
      "Value": 154, 
      "Unit": "lux" 
     }, 
     "Co2": null, 
     "Temperature": { 
      "Value": 32.3, 
      "Unit": "C" 
     }, 
     "Humidity": { 
      "Value": 12, 
      "Unit": "%" 
     } 
     } 
    }, 
    "Room": "Room  1", 
    "Id": "fa9ba4d0-3e69-46f0-9460-05d6b2ff1211", 
    "Name": "Building 1" 
    } 
} 
--- 
Time stamp: 2017-01-30T13:50:22.3854765+00:00 
Real Estate ID: fa9ba4d0-3e69-46f0-9460-05d6b2ff1211 
Device ID: fa9ba4d0-3e69-46f0-9460-08d6b2ff6408 
1

辞書。これにアクセスするには、単にb[None]と入力します。その呼び出しから返される値は、接頭辞が全体のu'...'になります。

これは要素がPython辞書ではなくUnicode文字列であるためアクセスできません。あなたが辞書にこのJSON文字列を変換する必要があり、あなたがここに指示を見つけることができます。

https://pythonspot.com/json-encoding-and-decoding-with-python/

ホープ、これはまあ