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

请求编写Jolt转换规则实现指定JSON格式转换

Jolt转换规则实现求助

我提供的输入JSON如下:

{"user": {"firstName": "abc","lastName": "xyz","email": "xyz@abc.com"},"selections": [{"id": "123","person": "user","attributes": [{"attributeId": "AA","options": ["11"]},{"attributeId": "BB","options": ["22"]},{"attributeId": "CC","options": ["33"]}]}]}

期望得到的输出JSON为:

{"firstName": "User firstName","lastName": "User lastName","username": "concatenation of firstname and lastname","isActive": true,"valueofBB": "22","phone": "","CCLinkedToUser": [{"id": "33","default": true}]}

目前我只能通过以下Jolt规则转换前两个字段,无法获取BB、CC等属性的值,请求协助完成完整的Jolt转换规则:

[{"operation": "shift","spec": {"*": {"firstName": "firstName","lastName": "lastName","isActive": "true","email": "email","phone": "null"}}}]

完整Jolt转换规则

[
  // 提取基础字段并按属性值分组属性数据
  {
    "operation": "shift",
    "spec": {
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      },
      "selections": {
        "*": {
          "attributes": {
            "*": {
              "attributeId": "@(1,options[0]).&"
            }
          }
        }
      }
    }
  },
  // 构造目标字段并映射属性值
  {
    "operation": "shift",
    "spec": {
      "firstName": ["firstName", "username"],
      "lastName": "username",
      "@(0,firstName)": {
        "*": {
          "#User firstName": "firstName"
        }
      },
      "@(0,lastName)": {
        "*": {
          "#User lastName": "lastName"
        }
      },
      "22": {
        "BB": "valueofBB"
      },
      "33": {
        "CC": {
          "#33": "CCLinkedToUser[0].id",
          "#true": "CCLinkedToUser[0].default"
        }
      },
      "#true": "isActive",
      "#": "phone"
    }
  },
  // 拼接用户名
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "username": "=concat(@(1,username[0]),' ',@(1,username[1]))"
    }
  },
  // 清理临时字段
  {
    "operation": "remove",
    "spec": {
      "11": "",
      "22": "",
      "33": ""
    }
  }
]

规则说明

  1. 第一步Shift:提取用户的姓名字段,同时把attributes里的属性按对应options值分组,为后续映射做准备。
  2. 第二步Shift:
    • 将姓名字段同时映射到username数组,用于拼接;
    • 替换姓名原始值为期望的固定文本;
    • 匹配BB对应的选项值"22",映射到valueofBB;
    • 匹配CC对应的选项值"33",构造CCLinkedToUser数组对象;
    • 直接设置isActive为true、phone为空字符串。
  3. Modify操作:用concat函数拼接username数组里的姓名,生成最终用户名。
  4. Remove操作:删除第一步生成的临时分组字段,保证输出结构干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:26:15