我很难用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
}
]
]
}
}
}
}
}
}
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]
修订后的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 }。 ] ] ] } }] }}