井井有条的json上的Python ijson

时间:2018-06-27 18:01:36

标签: python json ijson

我正试图从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,因此我对此感到有些困惑。

2 个答案:

答案 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