Python-ijson在组织不好的json上的应用

2024-09-30 06:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从中获取数据康塔克提奥的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树的情况下使它工作(如地球、欧洲等。项目示例随处可见)。我应该试着rssi.项目使用数组索引之类的?我应该修剪json的“b”和尾部的“'”?你知道吗

我不经常和Python一起工作,所以我觉得有点不自在。你知道吗


Tags: jsontimestampb3d2rssieableproximity
2条回答

试试这个:

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]

在康斯坦丁和胡安帕.阿里维拉加的答案结合起来。 使用导入json而不是ijson

    test = json.loads(msg.payload.decode())
    print([x.get('rssi') for x in test])

相关问题 更多 >

    热门问题