2017-01-30 1 views
1

Ich habe folgendes dict:Probleme beim Zugriff Python-Wörterbuch Elemente

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}'} 

und kippe Zugang alle Elemente. Versucht beide b['None'], b['u'] und b['TimeStamp'] die alle erzeugt:

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

KeyError: 'u'

Irgendwelche Tipps !?

+2

Nun 'ist U' nicht ** ** ein Schlüssel des Wörterbuchs,' None 'ist. Sie können also mit 'b [None]' darauf zugreifen. –

Antwort

2

Sie haben ein Wörterbuch mit einem Schlüssel, auf den Sie über b[None] zugreifen können. Dieser Wert wiederum ist ein String, kein Wörterbuch. Um das Wörterbuch zu erhalten, müssen Sie JSON verwenden, um es zu entschlüsseln:

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

Ausgang:

{ 
    "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

Das Wörterbuch, das Sie hat nur einen Schlüssel geteilt, ein Objekt vom Typ Keine. Um darauf zuzugreifen, geben Sie einfach Folgendes ein: b[None] Der von diesem Aufruf zurückgegebene Wert ist die gesamte Zeichenfolge mit dem Präfix u'...'.

Sie können nicht auf die Elemente zugreifen, da dies nur eine Unicode-Zeichenfolge und kein Python-Wörterbuch ist. Sie benötigen diese JSON-String in ein Wörterbuch zu konvertieren und Sie Anweisungen finden Sie hier:

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

hoffe, das hilft

Verwandte Themen