如何使用JSONata转换指定JSON数组以适配Grafana Infinity插件?
使用JSONata将数组字段展开为带索引的独立字段(适配Grafana Infinity插件)
以下是实现需求的JSONata表达式,可直接在Grafana Infinity插件中使用:
$map($, function($item) { $merge([ {"timestamp": $item.timestamp}, $reduce($item.absoluteDeviationsX, function($acc, $val, $idx) { $merge([$acc, {$join(["absoluteDeviationsX", $idx]): $val}]) }, {}) ]) })
逻辑说明
- 遍历数组:用
$map处理原JSON数组中的每个对象,确保每条数据都被转换 - 保留核心字段:单独提取原对象的
timestamp,作为新对象的基础字段 - 展开数组元素:通过
$reduce遍历absoluteDeviationsX数组,利用循环索引$idx拼接字段名(如absoluteDeviationsX0),将数组元素逐个转换为键值对,最终合并成完整对象
输入输出验证
修正后的输入JSON(原输入存在语法错误,已修正第二个对象的多余括号):
[ { "timestamp": "2025-01-19T17:00:00Z", "absoluteDeviationsX": [10, 11, 12] }, { "timestamp": "2025-01-20T17:00:00Z", "absoluteDeviationsX": [20, 21, 22] } ]
转换后输出:
[ { "timestamp": "2025-01-19T17:00:00Z", "absoluteDeviationsX0": 10, "absoluteDeviationsX1": 11, "absoluteDeviationsX2": 12 }, { "timestamp": "2025-01-20T17:00:00Z", "absoluteDeviationsX0": 20, "absoluteDeviationsX1": 21, "absoluteDeviationsX2": 22 } ]
内容的提问来源于stack exchange,提问作者Martin Gonzalez
相关产品推荐
相关产品推荐

