解析深度嵌套的JSON文件

问题描述 投票:0回答:1

我很难用json_normalize得到我需要的信息。 我看了文档和大概10个深度嵌套的JSON文件的例子,但我不能很好地理解函数的上下文,无法提取正确的信息。我试图建立一个数据框架,包含每个传感器的时间戳值(值键)。 1534023900是以UTC秒为单位的时间戳。

在这里输入图像描述

下面是一个简短的JSON样本。

有什么想法吗?

{
    "created": "2020-05-12T15:10:37Z",
    "device": {
        "device_info": {
            "device_fw": 204,
            "device_sn": "06-02133",
            "device_trait": 2,
            "device_type": 190
        },
        "timeseries": [
            {
                "configuration": {
                    "sensors": [
                        {
                            "measurements": [
                                "BATTERY",
                                "BATTERY_MV"
                            ],
                            "port": 7,
                            "sensor_bonus_value": "Unavailable",
                            "sensor_firmware_ver": "Unavailable",
                            "sensor_number": 133,
                            "sensor_sn": "Unavailable"
                        },
                        {
                            "measurements": [
                                "REFERENCE_KPA",
                                "TEMPC_LOGGER"
                            ],
                            "port": 8,
                            "sensor_bonus_value": "Unavailable",
                            "sensor_firmware_ver": "Unavailable",
                            "sensor_number": 134,
                            "sensor_sn": "Unavailable"
                        }
                    ],
                    "valid_since": "2018-08-11T21:45:00Z",
                    "values": [
                        [
                            1534023900,
                            0,
                            19,
                            [
                                {
                                    "description": "Battery Percent",
                                    "error": false,
                                    "units": "%",
                                    "value": 100
                                },
                                {
                                    "description": "Battery Voltage",
                                    "error": false,
                                    "units": " mV",
                                    "value": 7864
                                }
                            ],
                            [
                                {
                                    "description": "Reference Pressure",
                                    "error": false,
                                    "units": " kPa",
                                    "value": 100.62
                                },
                                {
                                    "description": "Logger Temperature",
                                    "error": false,
                                    "units": " \u00b0C",
                                    "value": 28.34
                                }
                            ]
                        ]
					}
				}
			}
		}
	}	
}
json normalize
1个回答
0
投票

jmespath 可以帮助处理嵌套的数据 文件 是相当健壮的,但访问数据的基本原则是:如果它是一个键,那么你可以使用一个 . 如果它不是数据中的第一个条目,如果它是一个数组列表,则使用 []

你的数据位置的摘要。device -> timeseries(dict)->[](array)->configuration(dict)->values(key)->[](array)->[0](array and get the first value)

实际代码。

import jmespath
expression = jmespath.compile('device.timeseries[].configuration.values[][0]')
expression.search(data)
[1534023900]

0
投票

修订后的JSON码

{ "created": "2020-05-12T15:10:37Z", "device": { "device_info": { "device_fw": 204, "device_sn": "06-02133", "device_trait": { "device_fw": 204, "device_sn": "06-02133", "device_trait": 2, "device_type", 190 }, "timeeries": { "device_fw": 204, "device_sn": "06-02133", "device_trait": 2, "device_type": 190 }, "timeseries". "device_fw": { "device_sn": "06-02133", "device_trait": 2, "device_type": 190 }, "timeseries": [ { "configuration": { "传感器": [ { "测量": [ "BATTERY", "BATTERY_MV" ], "port": 7, "sensor_bonus_value": "不可用", "sensor_firmware_ver": "不可用","sensor_number","sensor_sn"。133, "sensor_sn": "Unavailable" }, { "measures".Sensor_firmware_ver": "Unavailable", "sensor_number": 133, "sensor_sn": "Unavailable" }, { "measures": [ "REFERENCE_KPA", "TEMPC_LOGGER" ], "port": 8, "sensor_bonus_value": "不可用", "sensor_firmware_ver": "不可用","sensor_number","sensor_sn"。134, "sensor_sn": "不可用" } ], "valid_since": "2018-08-11T21:45:00Z", "values": [ [ 1534023900, 0, 19, [ { "description": "电池百分比", "错误": false, "单位": "%", "value": 100 }, { "description": "电池电压", "错误": false, "单位": " mV", "值": 100 }, { "描述": "电池电压", "错误": false, "单位": " mV": " mV", "值": 7864 }。 ], [ { "description": "参考压力", "错误": false, "单位": " kPa", "value": 100.62 }, { "description": "记录仪温度", "错误": false, "单位": "\u00b0C", "值": 28.34 }。 ] ] ] } }] }}

© www.soinside.com 2019 - 2024. All rights reserved.