如何在Kusto中拆分JSON的analog-values并关联设备位置信息?
Kusto Query Solution for New JSON Structure
Final Query Code
print sampleData = dynamic({ "url": "/api/rest/v2/services/bacnet", "status": 200, "headers": { "content-length": "1067", "content-type": "application/json" }, "body": { "local": { "objects": { "devices": { "5000": { "object-name": "ABC-LDN-DEF-GHIJ" }, "4194303": { "object-name": "ABC-LDN-DEF-GHIJ" } }, "analog-values": { "1": { "units": "NoUnits", "present-value": 0 }, "2": { "units": "NoUnits", "present-value": 122 } } } } } }) // 提取第一个device的object-name并生成位置子串 | extend devices = sampleData.body.local.objects.devices | mv-expand kind=array deviceEntry = devices | take 1 // 直接取第一个设备条目 | extend objectName = tostring(deviceEntry[1].['object-name']) | extend location = substring(objectName, 4, 3) // 将analog-values拆分为单独行 | project sampleData, location | mv-expand kind=array analogEntry = sampleData.body.local.objects.['analog-values'] // 解析每个analog-value的字段 | extend objectId = tostring(analogEntry[0]), units = tostring(analogEntry[1].units), presentValue = analogEntry[1].['present-value'] // 保留需要的输出字段 | project location, objectId, units, presentValue
Key Steps Explanation
- 提取位置信息:
- 从JSON中拆分出
devices节点,用mv-expand kind=array把字典转为键值对数组,通过take 1直接获取第一个设备条目。 - 提取该条目的
object-name,再用substring截取指定位置的子串作为位置信息。
- 从JSON中拆分出
- 拆分analog-values:
- 拆分出
analog-values节点,同样用mv-expand kind=array将每个条目转为单独行。 - 解析每条记录的
objectId(键值对的键)、units和present-value字段。
- 拆分出
- 整合结果: 将位置信息与解析后的analog-value字段组合,得到目标输出结构。
内容的提问来源于stack exchange,提问作者aTTraX
相关产品推荐
相关产品推荐

