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

使用JOLT将复杂嵌套JSON转换为扁平JSON的技术求助

多层数组JSON转扁平JSON的JOLT解决方案

输入JSON

{
  "data": [
    {
      "id": "1",
      "name": "A",
      "details": [
        {
          "type": "X",
          "values": [1,2,3]
        },
        {
          "type": "Y",
          "values": [4,5,6]
        }
      ]
    },
    {
      "id": "2",
      "name": "B",
      "details": [
        {
          "type": "Z",
          "values": [7,8,9]
        }
      ]
    }
  ]
}

现有JOLT转换代码

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "details": {
            "*": {
              "values": {
                "*": {
                  "@(4,id)": "id",
                  "@(4,name)": "name",
                  "@(2,type)": "type",
                  "@": "value"
                }
              }
            }
          }
        }
      }
    }
  }
]

期望目标输出(9行数据)

[
  {"id":"1","name":"A","type":"X","value":1},
  {"id":"1","name":"A","type":"X","value":2},
  {"id":"1","name":"A","type":"X","value":3},
  {"id":"1","name":"A","type":"Y","value":4},
  {"id":"1","name":"A","type":"Y","value":5},
  {"id":"1","name":"A","type":"Y","value":6},
  {"id":"2","name":"B","type":"Z","value":7},
  {"id":"2","name":"B","type":"Z","value":8},
  {"id":"2","name":"B","type":"Z","value":9}
]

正确JOLT转换方案

[
  {
    "operation": "shift",
    "spec": {
      "data": {
        "*": {
          "id": "&1.id",
          "name": "&1.name",
          "details": "&1.details"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "details": {
          "*": {
            "@(2,id)": "&3.&1.id",
            "@(2,name)": "&3.&1.name",
            "type": "&3.&1.type",
            "values": "&3.&1.values"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "values": {
            "*": {
              "@(2,id)": "[&3].id",
              "@(2,name)": "[&3].name",
              "@(2,type)": "[&3].type",
              "@": "[&3].value"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]

转换逻辑说明

  1. 第一层Shift:拆分data数组的每个元素,保留id、name并关联到对应索引节点,同时传递details数组,为后续层级展开做铺垫。
  2. 第二层Shift:展开details数组,将上层的id、name映射到每个details元素节点上,确保层级关联不丢失。
  3. 第三层Shift:展开values数组,将每个数值与对应的id、name、type组合成扁平对象,通过[&3]索引标记每个对象的数组位置,保证最终生成9条独立数据。
  4. 第四层Shift:将分散的对象节点合并为一个统一的数组,输出符合要求的扁平JSON结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:29:51