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