我有以下词典:
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}'}
无法访问任何元素。尝试了所有生成的b['None']
,b['u']
和b['TimeStamp']
:
ERROR: ..../sparkstream.py", line 24, in test
c = b['u']
KeyError:'你'
任何提示!?
答案 0 :(得分:2)
What you have a a dictionary with one key, which you can access the value via b[None]
. This value in turn, is a string, not a dictionary. In order to get the dictionary, you will have to use JSON to decode it:
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']
Output:
{
"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 :(得分:1)
您共享的词典只有一个键,一个类型为None的对象。要访问它,只需键入:b[None]
从该调用返回的值将是前缀为u'...'
的整个字符串。
您无法访问其中的元素,因为这只是一个Unicode字符串,而不是python字典。您需要将此JSON字符串转换为字典,您可以在此处找到说明:
https://pythonspot.com/json-encoding-and-decoding-with-python/
希望这有帮助