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

使用JOLT转换列表为对象数组并填充attr关联codes数据

JSON转换需求:用codes字段丰富items中的attr数组为对象映射

输入JSON

{"items": {"a1b2xxxx": {"name": "item 1","attr": ["A","B","C"]},"c2b2cxxxx": {"name": "item 2","attr": ["D","E","F"]}},"codes": {"A": {"color": "green"},"B": {"size": "M"},"C": {"sku": "NS"},"D": {"stock": 2},"E": {"some_key": "some_value"},"F": {"foo": "bar"}}}

期望输出JSON

{"items": {"a1b2xxxx": {"name": "item 1","attr": {"A": {"color": "green"},"B": {"size": "M"},"C": {"sku": "NS"}}},"c2b2xxxx": {"name": "item 2","attr": {"D": {"stock": 2},"E": {"some_key": "some_value"},"F": {"foo": "bar"}}}},"codes": {"A": {"color": "green"},"B": {"size": "M"},"C": {"sku": "NS"},"D": {"stock": 2},"E": {"some_key": "some_value"},"F": {"foo": "bar"}}}

当前尝试的转换器

[{"operation": "cardinality","spec": {"items": {"*": {"attr": "ONE"}}}}]

解决方案

你之前用cardinality操作的思路有误,cardinality: "ONE"是将数组转为单个元素(仅保留第一个),无法实现把数组所有元素映射为对象键值对的需求。正确做法是使用shift操作重组结构,同时引用codes中的对应值:

[
  {
    "operation": "shift",
    "spec": {
      "codes": "&",
      "items": {
        "*": {
          "name": "&1.name",
          "attr": {
            "*": {
              "@(3,codes,&)": "&2.attr.&"
            }
          }
        }
      }
    }
  }
]

转换逻辑说明

  • 保留codes字段不变("codes": "&");
  • 遍历items下的所有子项("*"),保留原name字段;
  • 遍历每个子项的attr数组元素("*"),通过@(3,codes,&)向上3层获取codes中与当前数组元素同名的对象,再将其映射到当前子项的attr对象下,以数组元素为键("&2.attr.&")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:01:21