我很难用json_normalize获取我需要的信息。我已经看过文档和大概10个深嵌套JSON文件的示例,但是我不能很好地掌握函数的上下文来提取正确的信息。我试图构建一个 Dataframe ,其中包含每个传感器的时间戳值(值键)。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_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
}
]
]
}
}
}
}
}
}
字符串
3条答案
按热度按时间bq3bfh9z1#
jmespath可以帮助处理嵌套数据:docs非常健壮,但访问数据的基本功能如下:如果它是一个键,那么你可以使用
.
,如果它不是数据中的第一个条目,如果它是一个数组/列表,你可以使用[]
您的数据位置摘要:
device -> timeseries(dict)->[](array)->configuration(dict)->values(key)->[](array)->[0](array and get the first value)
个实际代码:
字符串
ubby3x7f2#
修改后的JSON
字符串
vfh0ocws3#
我一直在研究一个类似的问题,json_normalize对我没有太大帮助。但是,我已经编写了下面的代码,对于大多数嵌套的JSON用例都很好地工作。我仍然处于开发状态,正在测试各种JSON文件。任何人,请随时发表评论或提供任何改进这一部分的建议。
我的主要目标是保留JSON的结构并将其提供在 Dataframe 中。
字符串
将上面的代码保存到文件flat_json.py中。运行以下代码。
型
产出
型
现在,在这个df中,您可以使用device. timesies.configuration.values列对每个传感器数据做进一步的分析。