0

我正在尝试从 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,所以对此我感到有些不知所措。

4

2 回答 2

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]
于 2018-06-27T18:05:56.787 回答
0

在 Konstantin 和 juanpa.arrivillaga 的答案的帮助下解决了。使用导入 json 而不是 ijson

    test = json.loads(msg.payload.decode())
    print([x.get('rssi') for x in test])
于 2018-06-27T18:12:40.447 回答