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

基于id合并JSON数组数据,修复JOLT丢失nationalities数组问题

JOLT合并JSON对象并保留数组结构解决方案

需求:按id合并clubhouse数组中的对象,合并investors数组,同时保留nationalities等其他数组结构。原JOLT脚本在新增nationalities数组后丢失其结构,现提供修正方案。

原始JSON数据

{"clubhouse": [{"id": "01","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "1"},{"nationalityid": "2"},{"nationalityid": "3"}],"TypeId": "3","investors": [{"investor": {"id": "1234","gender": "01"},"inamount": "1500000","ratio": "12"}]},{"id": "01","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "1"},{"nationalityid": "2"},{"nationalityid": "3"}],"TypeId": "3","investors": [{"investor": {"id": "4321","gender": "02"},"inamount": "1700000","ratio": "12"}]},{"id": "02","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "3"},{"nationalityid": "4"},{"nationalityid": "5"}],"TypeId": "3","investors": [{"investor": {"id": "1333","gender": "01"},"inamount": "1500000","ratio": "12"}]},{"id": "03","statusId": "ok","stateid": "5","nationalities": [{"nationalityid": "3"},{"nationalityid": "4"},{"nationalityid": "5"}],"TypeId": "3","investors": [{"investor": {"id": "","gender": ""},"inamount": "","ratio": ""}]},{"id": "02","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "3"},{"nationalityid": "4"},{"nationalityid": "5"}],"TypeId": "3","investors": [{"investor": {"id": "1334","gender": "02"},"inamount": "1900000","ratio": "12"}]}]}

原JOLT脚本(存在结构丢失问题)

[{"operation": "shift","spec": {"*": {"*": {"*": "@(1,id).&","investors": {"*": {"*": {"@": "@(4,id).&3[&4].&"}}}}}}},{"operation": "modify-overwrite-beta","spec": {"*": "=recursivelySquashNulls"}},{"operation": "cardinality","spec": {"*": {"*": "ONE","investors": "MANY"}}},{"operation": "shift","spec": {"*": ""}}]

期望输出JSON

{"clubhouse": [{"id": "01","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "1"},{"nationalityid": "2"},{"nationalityid": "3"}],"TypeId": "3","investors": [{"investor": {"id": "1234","gender": "01"},"inamount": "1500000","ratio": "12"},{"investor": {"id": "4321","gender": "02"},"inamount": "1700000","ratio": "12"}]},{"id": "02","statusId": "ok","stateid": "2","nationalities": [{"nationalityid": "3"},{"nationalityid": "4"},{"nationalityid": "5"}],"TypeId": "3","investors": [{"investor": {"id": "1333","gender": "01"},"inamount": "1500000","ratio": "12"},{"investor": {"id": "1334","gender": "02"},"inamount": "1900000","ratio": "12"}]},{"id": "03","statusId": "ok","stateid": "5","nationalities": [{"nationalityid": "3"},{"nationalityid": "4"},{"nationalityid": "5"}],"TypeId": "3","investors": [{"investor": {"id": "","gender": ""},"inamount": "","ratio": ""}]}]}

修正后的JOLT脚本

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "id": "@(1,id).id",
          "statusId": "@(1,id).statusId",
          "stateid": "@(1,id).stateid",
          "TypeId": "@(1,id).TypeId",
          "nationalities": "@(1,id).nationalities",
          "investors": {
            "*": "@(3,id).investors[]"
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=recursivelySquashNulls"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "*": {
        "id": "ONE",
        "statusId": "ONE",
        "stateid": "ONE",
        "TypeId": "ONE",
        "nationalities": "ONE",
        "investors": "MANY"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "clubhouse[]"
    }
  }
]

脚本说明

  1. 第一个shift操作:
    • 对id、statusId等单值字段,按@(1,id)作为键进行分组映射
    • 直接保留nationalities数组的完整结构到对应分组
    • 用investors[]的方式收集同id下的所有投资者元素,实现数组合并
  2. modify-overwrite-beta操作:递归压缩空值,可根据实际需求决定是否保留
  3. cardinality操作:指定单值字段只保留一个实例(同id的这些字段值一致),investors保持多元素数组,nationalities因为同id值相同,用ONE确保只保留一份
  4. 最后一个shift操作:将分组后的对象重新整理为数组,并包裹到clubhouse键下,匹配期望输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:10:36