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

求助:基于id实现JOLT中users与status数组的关联映射

JOLT映射解决方案:将availability字符串替换为对应status对象

输入JSON

{
  "status": [
    {
      "id": "online",
      "state": "valid"
    },
    {
      "id": "busy",
      "state": "unknown"
    },
    {
      "id": "any",
      "state": "unknow",
      "moreInfo": "unavailable"
    }
  ],
  "users": [
    {
      "title": "foo",
      "availability": [
        "online",
        "busy"
      ]
    },
    {
      "title": "bar",
      "availability": [
        "busy",
        "any"
      ]
    },
    {
      "title": "baz",
      "availability": [
        "any"
      ]
    }
  ]
}

期望输出JSON

{
  "users": [
    {
      "title": "foo",
      "availability": [
        {
          "id": "online",
          "state": "valid"
        },
        {
          "id": "busy",
          "state": "unknown"
        }
      ]
    },
    {
      "title": "bar",
      "availability": [
        {
          "id": "busy",
          "state": "unknown"
        },
        {
          "id": "any",
          "state": "unknow",
          "moreInfo": "unavailable"
        }
      ]
    },
    {
      "title": "baz",
      "availability": [
        {
          "id": "any",
          "state": "unknow",
          "moreInfo": "unavailable"
        }
      ]
    }
  ]
}

核心需求

把users数组中每个对象的availability数组字符串元素,替换成status数组中id匹配的完整对象。


可用的JOLT Spec

[
  // 第一步:将status数组转为以id为键的映射表,方便快速查找
  {
    "operation": "shift",
    "spec": {
      "status": {
        "*": {
          "id": "statusMap.&",
          "*": "statusMap.&1.&"
        }
      },
      "users": "users"
    }
  },
  // 第二步:遍历users,用映射表中的对象替换availability的字符串
  {
    "operation": "shift",
    "spec": {
      "users": {
        "*": {
          "title": "users[&1].title",
          "availability": {
            "*": {
              "@(2,statusMap.&)": "users[&3].availability[&1]"
            }
          }
        }
      }
    }
  },
  // 第三步:清理临时生成的映射表
  {
    "operation": "remove",
    "spec": {
      "statusMap": ""
    }
  }
]

步骤拆解

  1. 构建status映射表
    用shift操作把status数组转换成statusMap对象,每个id作为键,对应的完整状态对象作为值。比如statusMap.online直接对应{"id": "online", "state": "valid"},后续不用再遍历数组找匹配项。

  2. 替换availability元素
    再次用shift操作处理users数组:保留title字段不变,对availability里的每个字符串,通过@(2,statusMap.&)引用statusMap中对应键的对象,替换掉原字符串。这里的引用语法意思是往上回溯2层找到statusMap,用当前字符串值作为键取出对应对象。

  3. 清理临时数据
    最后用remove操作删掉临时的statusMap,只保留最终需要的users数组。

内容的提问来源于stack exchange,提问作者Maeko Thịnh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:40:39