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

在JOLT中添加条件语句:仅当存在temp_1时转换温度至摄氏度

解决NiFi中JOLT仅在存在temp_1字段时转换温度的问题

需求说明

在NiFi流中使用JOLT将temp_1字段的华氏温度转换为摄氏度,要求仅当输入JSON包含temp_1字段时才执行转换操作,无该字段时不生成额外的温度相关字段。

现有问题

原JOLT表达式会对所有数组对象执行修改操作,即使输入中没有temp_1字段,也会生成该字段(值为无效的NaN或null),不符合需求。

修正后的JOLT表达式

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "?temp_1": {
          "temp_1": "=divideAndRound(2,=doubleSum(@(1,temp_1),-32),1.8)"
        }
      }
    }
  }
]

表达式说明

  • modify-overwrite-beta:用于覆盖已有字段的值,不会主动创建新字段
  • *:匹配输入数组中的每一个对象
  • ?temp_1:JOLT条件匹配器,仅当当前对象包含temp_1字段时,才执行内部的修改逻辑
  • 嵌套函数直接完成华氏转摄氏计算:
    1. =doubleSum(@(1,temp_1),-32):计算华氏温度减32的中间结果
    2. =divideAndRound(2, [上一步结果], 1.8):将中间结果除以1.8,并保留两位小数,得到最终摄氏温度值

测试验证

测试输入1(含temp_1字段)

[
  {
    "rx_state": 0,
    "tx_id": 3,
    "temp_1": 54.8,
    "trans_battery_flag": 0,
    "ts": 1729646742,
    "station_name": "abc"
  }
]

输出结果1

[
  {
    "rx_state": 0,
    "tx_id": 3,
    "temp_1": 12.67,
    "trans_battery_flag": 0,
    "ts": 1729646742,
    "station_name": "abc"
  }
]

测试输入2(无temp_1字段)

[
  {
    "bar_absolute": 30.206,
    "tz_offset": 3600,
    "bar_sea_level": 30.483,
    "bar_offset": -0.001,
    "bar_trend": 0.016,
    "ts": 1729646742,
    "station_name": "abc"
  }
]

输出结果2

与输入完全一致,未生成额外的temp_1字段。


内容的提问来源于stack exchange,提问作者BHADRAKA HERATH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:53:13