解析深度嵌套的JSON文件

我正在努力通过json_normalize获得所需的信息。我查看了文档以及可能深度嵌套的JSON文件的10个示例,但我不太了解该函数的上下文以提取正确的信息。我正在尝试建立一个数据框,其中将包含每个传感器的带有时间戳的值(值键)。 1534023900是UTC秒的时间戳。

enter image description here

下面是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_number": 134,"sensor_sn": "Unavailable"
                        }
                    ],"valid_since": "2018-08-11T21:45:00Z","values": [
                        [
                            1534023900,19,[
                                {
                                    "description": "Battery Percent","error": false,"units": "%","value": 100
                                },{
                                    "description": "Battery Voltage","units": " mV","value": 7864
                                }
                            ],[
                                {
                                    "description": "Reference Pressure","units": " kPa","value": 100.62
                                },{
                                    "description": "Logger Temperature","units": " \u00b0C","value": 28.34
                                }
                            ]
                        ]
					}
				}
			}
		}
	}	
}

happy219 回答:解析深度嵌套的JSON文件

修订的JSON

{ “ created”:“ 2020-05-12T15:10:3​​7Z”, “设备”:{ “设备信息”: { “ device_fw”:204, “ device_sn”:“ 06-02133”, “ device_trait”:2 “ device_type”:190 }, “时间序列”: [ { “配置”:{ “传感器”:[ { “测量”: [ “电池”, “ BATTERY_MV” ], “端口”:7 “ sensor_bonus_value”:“不可用”, “ sensor_firmware_ver”:“不可用”, “ sensor_number”:133, “ sensor_sn”:“不可用” }, { “测量”: [ “ REFERENCE_KPA”, “ TEMPC_LOGGER” ], “端口”:8 “ sensor_bonus_value”:“不可用”, “ sensor_firmware_ver”:“不可用”, “ sensor_number”:134, “ sensor_sn”:“不可用” } ], “ valid_since”:“ 2018-08-11T21:45:00Z”, “值”:[ [ 1534023900, 0, 19 [ { “说明”:“电池百分比”, “错误”:错误, “单位”: ”%”, “值”:100 }, { “描述”:“电池电压”, “错误”:错误, “单位”:“ mV”, “值”:7864 } ], [ { “描述”:“参考压力”, “错误”:错误, “ units”:“ kPa”, “值”:100.62 }, { “ description”:“记录仪温度”, “错误”:错误, “ units”:“ \ u00b0C”, “值”:28.34 } ] ] ] } }] } }

,

jmespath可以帮助处理嵌套数据:docs非常强大,但是访问数据的基础是:如果它是密钥,那么您可以使用.不是数据中的第一项,如果它是数组/列表,请使用[]

您的数据位置摘要: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]
本文链接:https://www.f2er.com/2364452.html

大家都在问