You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegraf json_v2插件解析JSON数组出现重复值,求正确配置

问题描述

现有JSON数据:

{
  "inc_code": "I1",
  "sensors": [
    {
      "n": 1,
      "aX": 12
    },
    {
      "n": 2,
      "aX": 50
    }
  ]
}

期望Telegraf输出结果:

I1, n=1 aX=12
I1, n=2 aX=50

尝试的配置:

[[inputs.mqtt_consumer.json_v2]]
   measurement_name_path = "inc_code"
    [[inputs.mqtt_consumer.json_v2.tag]]
        path = "sensors.#.n"
    [[inputs.mqtt_consumer.json_v2.field]]
        path = "sensors.#.aX"
        type = "float"

得到的错误结果(存在值重复):

I1,n=1 aX=12 1690565287967408422
I1,n=1 aX=50 1690565287967408422
I1,n=2 aX=12 1690565287967408422
I1,n=2 aX=50 1690565287967408422
正确配置写法

问题出在直接使用sensors.#通配符会导致所有匹配的tag和field值做笛卡尔积,从而生成重复组合的数据。需要改用json_v2的array块来遍历sensors数组,每个数组元素单独生成一条数据:

[[inputs.mqtt_consumer]]
  # 此处保留你的MQTT连接配置(如servers、topics等)
  [[inputs.mqtt_consumer.json_v2]]
    measurement_name_path = "inc_code"
    # 遍历sensors数组,每个元素生成一条数据
    [[inputs.mqtt_consumer.json_v2.array]]
      path = "sensors"
      # 将数组元素中的n设为tag
      [[inputs.mqtt_consumer.json_v2.array.tag]]
        path = "n"
      # 将数组元素中的aX设为浮点型field
      [[inputs.mqtt_consumer.json_v2.array.field]]
        path = "aX"
        type = "float"

配置说明:

  • array块指定遍历sensors数组,每个数组元素独立处理
  • 数组内部的tag和field仅作用于当前数组元素,避免了笛卡尔积导致的重复数据
  • measurement_name_path依然使用inc_code的值作为测量名称,符合期望输出格式

内容的提问来源于stack exchange,提问作者Ricardo Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:01:13