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

JOLT转换疑问:如何将嵌套对象转为指定结构数组

JOLT嵌套JSON转数组结构问题

输入JSON

{
  "Ids": {
    "IND": {
      "IND-ADR": {
        "id": "ind-adr-id",
        "key": "ind1"
      },
      "IND-PAN": {
        "id": "ind-pan-id",
        "key": "ind2"
      }
    },
    "USA": {
      "USA-SSN": {
        "id": "usa-ssn-id",
        "key": "usa1"
      }
    }
  }
}

期望输出

{
  "Ids": [
    {
      "country": "IND",
      "IdType": "IND-ADR",
      "id": "ind-adr-id",
      "key": "ind1"
    },
    {
      "country": "IND",
      "IdType": "IND-PAN",
      "id": "ind-pan-id",
      "key": "ind2"
    },
    {
      "country": "USA",
      "IdType": "USA-SSN",
      "id": "usa-ssn-id",
      "key": "usa1"
    }
  ]
}

当前错误输出

{
  "country" : [ "IND", "USA" ],
  "IdType" : [ "IND-ADR", "IND-PAN", "USA-SSN" ],
  "id" : [ "ind-adr-id", "ind-pan-id", "usa-ssn-id" ],
  "Key" : [ "ind1", "ind2", "usa1" ]
}

当前使用的JOLT配置

[
  {
    "operation": "shift",
    "spec": {
      "Ids": {
        "*": {
          "$": "country",
          "*": {
            "$": "IdType",
            "*": "&"
          }
        }
      }
    }
  }
]

问题分析

你当前的配置错误在于没有为每个ID条目创建独立的数组元素:直接将$(层级变量)赋值给顶级字段时,JOLT会把所有匹配的同名字段自动合并成数组,而不是把country、IdType、id、key关联到同一个对象里,最终导致各字段分离成独立数组。

修正后的JOLT配置

需要用数组索引语法Ids[],把每个国家下的每个ID类型条目映射为Ids数组中的一个独立对象,同时通过@(层级,$)语法获取上层的国家和ID类型值:

[
  {
    "operation": "shift",
    "spec": {
      "Ids": {
        "*": { // 遍历每个国家(如IND、USA)
          "*": { // 遍历每个国家下的ID类型(如IND-ADR、IND-PAN)
            "@(2,$)": "Ids[].country", // 向上2层取国家名称
            "@(1,$)": "Ids[].IdType", // 向上1层取ID类型名称
            "id": "Ids[].id",
            "key": "Ids[].key"
          }
        }
      }
    }
  }
]

说明

  • Ids[]:每匹配到一个ID类型条目,就往Ids数组添加一个新元素
  • @(2,$):回溯2层获取当前条目的国家键名
  • @(1,$):回溯1层获取当前条目的ID类型键名
  • 所有字段都映射到Ids[]下的对应属性,确保同一ID条目的字段属于同一个数组对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:15:57