我正试图从Kontakt.io的MQTT代理中获取数据。这是它提供的格式,包括前导b'和结尾'
b'[
{
"timestamp":1530121741,
"sourceId":"OaBW9",
"trackingId":"t7J5",
"rssi":-57,
"proximity":"IMMEDIATE",
"scanType":"BLE",
"deviceAddress":"ea:21:88:b3:d2:5f"
},
{
"timestamp":1530121741,
"sourceId":"OaBW9",
"trackingId":"t7J5",
"rssi":-68,
"proximity":"IMMEDIATE",
"scanType":"BLE",
"deviceAddress":"ea:21:88:b3:d2:5f"
}
]'
看到JSON中除了块之外没有其他组织,我该如何真正地使用键从中提取数据?
我尝试过:
test = ijson.items(str(msg.payload), 'rssi.item')
columns = list(test)
print(columns[0])
在许多示例中都可以看到,但是我想不出如何在不“钻入” JSON树的情况下使其工作(就像在各处看到的earth.europe.etc.item示例一样)。我应该尝试使用数组索引还是类似的方法来获取rssi.item?我是否应该修剪json的“ b”并在其后加上“”?
我不经常使用Python,因此我对此感到有些困惑。
答案 0 :(得分:1)
尝试这个:
import json
a = b'''[
{
"timestamp":1530121741,
"sourceId":"OaBW9",
"trackingId":"t7J5",
"rssi":-57,
"proximity":"IMMEDIATE",
"scanType":"BLE",
"deviceAddress":"ea:21:88:b3:d2:5f"
},
{
"timestamp":1530121741,
"sourceId":"OaBW9",
"trackingId":"t7J5",
"rssi":-68,
"proximity":"IMMEDIATE",
"scanType":"BLE",
"deviceAddress":"ea:21:88:b3:d2:5f"
}
]'''
b = json.loads(a)
print([x.get('rssi') for x in b])
输出:
[-57, -68]
答案 1 :(得分:0)
在Konstantin和juanpa.arrivillaga的帮助下得到了解决。 使用导入json 不 ijson
false