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

如何编写JOLT转换以基于内部字段修改数组中的特定对象

问题:修改Jolt中特定name对应的value字段为大写,且不改动其他对象或字段

需求:定位JSON中name为"Special Value"的对象,将其value字段转为大写,其余字段保持不变。

输入JSON

{
  "a": "aa",
  "b": "bb",
  "attributes": [
    {
      "groupName": "Group 1",
      "attribute": [
        {
          "name": "c",
          "value": "cc"
        }
      ]
    },
    {
      "groupName": "Group 2",
      "attribute": [
        {
          "name": "e",
          "value": "ee"
        },
        {
          "name": "Special Value",
          "value": "hello"
        },
        {
          "name": "f",
          "value": "ff"
        }
      ]
    }
  ]
}

期望输出JSON

{
  "a": "aa",
  "b": "bb",
  "attributes": [
    {
      "groupName": "Group 1",
      "attribute": [
        {
          "name": "c",
          "value": "cc"
        }
      ]
    },
    {
      "groupName": "Group 2",
      "attribute": [
        {
          "name": "e",
          "value": "ee"
        },
        {
          "name": "Special Value",
          "value": "HELLO"
        },
        {
          "name": "f",
          "value": "ff"
        }
      ]
    }
  ]
}

之前的尝试

使用shift操作可以定位到目标字段,但配合modify-overwrite-beta操作时报错,之前的shift Spec如下:

[
  {
    "operation": "shift",
    "spec": {
      "attributes": {
        "*": {
          "attribute": {
            "*": {
              "name": {
                "Special Value": {
                  "@(2,value)": "test"
                }
              }
            }
          }
        }
      }
    }
  }
]

解决方案

要实现只修改目标字段且保留其他所有数据,需结合保留原始结构和针对性修改的逻辑,使用modify-overwrite-beta操作的完整Spec如下:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      // 保留所有顶层字段(a、b)
      "*": "&",
      "attributes": {
        "*": {
          // 保留每个attributes元素的groupName
          "groupName": "&",
          "attribute": {
            "*": {
              // 匹配name为"Special Value"的对象,修改其value为大写
              "name": {
                "Special Value": {
                  "@(2,value)": "=toUpper"
                }
              },
              // 保留其他所有字段(非目标对象的name、value,以及目标对象的name)
              "&": "&"
            }
          }
        }
      }
    }
  }
]

逻辑说明

  1. "*": "&":通配符匹配所有顶层字段,原样保留,确保a、b字段不丢失。
  2. 针对attributes数组中的每个元素("*"):
    • 保留groupName字段不变;
    • 遍历attribute数组中的每个对象("*"):
      • 当对象的name为"Special Value"时,通过@(2,value)获取当前对象的value值,并用=toUpper转换为大写后覆盖原value;
      • "&": "&"确保所有其他字段(包括非目标对象的完整内容、目标对象的name字段)都原样保留。

执行该Spec后,输出结果与期望完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:34:53