Python 我json 组织不当 json
Python ijson on badly organized json
我正在尝试从 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])
如在许多示例中所见,但我无法弄清楚如何在没有 "burrowing" 到 JSON 树的情况下使其工作(如随处可见的 earth.europe.etc.item 示例)。我应该尝试使用数组索引或类似的东西来获取 rssi.item 吗?我应该 trim json 的“b'”和结尾的“'”吗?
我不经常和 Python 一起工作,所以我感觉有点不知所措。
试试这个:
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]
在 Konstantin 的帮助下和 juanpa.arrivillaga 的答案相结合解决了。
使用 import json not ijson
test = json.loads(msg.payload.decode())
print([x.get('rssi') for x in test])
我正在尝试从 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])
如在许多示例中所见,但我无法弄清楚如何在没有 "burrowing" 到 JSON 树的情况下使其工作(如随处可见的 earth.europe.etc.item 示例)。我应该尝试使用数组索引或类似的东西来获取 rssi.item 吗?我应该 trim json 的“b'”和结尾的“'”吗?
我不经常和 Python 一起工作,所以我感觉有点不知所措。
试试这个:
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]
在 Konstantin 的帮助下和 juanpa.arrivillaga 的答案相结合解决了。 使用 import json not ijson
test = json.loads(msg.payload.decode())
print([x.get('rssi') for x in test])