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

如何在Jolt转换中为message添加对应JSON对象键名?

问题描述

原始JSON结构如下:

{
  "error" : {
    "code" : "validation_failed",
    "message" : "Validation failed",
    "fields" : {
      "date_end" : {
        "code" : "min_value",
        "message" : "Value is less than minimum allowed"
      }
    }
  }
}

其中date_end可能替换为date_start、name或geo。当前使用的Jolt转换规则为:

[
  {
    "operation": "shift",
    "spec": {
      "error": {
        "fields": {
          "date_end|date_start|name|geo": {
            "message": "message"
          }
        }
      }
    }
  }
]

现在需要将对应字段的键名(如date_end)添加到提取的message内容前,期望输出:

{
  "message": "date_end|Value is less than minimum allowed"
}

请问如何修改Jolt转换规则实现该需求?


解决方案

通过三步Jolt操作即可实现需求,修改后的规则如下:

[
  // 第一步:捕获字段键名和对应message内容,暂存到临时字段
  {
    "operation": "shift",
    "spec": {
      "error": {
        "fields": {
          "date_end|date_start|name|geo": {
            "$": "temp.fieldKey", // 捕获当前匹配的字段键名
            "message": "temp.fieldMsg"
          }
        }
      }
    }
  },
  // 第二步:拼接键名与message内容,生成目标字段
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "message": "=concat(@(1,temp.fieldKey), '|', @(1,temp.fieldMsg))"
    }
  },
  // 第三步:清理临时字段,只保留最终结果
  {
    "operation": "remove",
    "spec": ["temp"]
  }
]

规则说明

  1. shift操作:用$符号精准捕获当前匹配到的字段键名(如date_end),存入temp.fieldKey;同时提取对应字段的message内容到temp.fieldMsg。
  2. modify-overwrite-beta操作:利用Jolt的concat函数,将字段键名、分隔符|、message内容拼接成新字符串,赋值给最终的message字段。
  3. remove操作:删除临时存储的temp对象,确保输出只包含目标message字段。

若需要支持多字段同时报错的场景,可调整规则将结果存入数组,但当前规则完全适配单字段报错的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:03:27