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

JOLT转换JSON数组未得预期扁平化结果,求修正规范

JOLT数组扁平化转换问题修正

输入JSON

{
  "object": {
    "settings": [
      {
        "key": {
          "id": 1
        },
        "rec": {
          "value": "value 1"
        }
      },
      {
        "key": {
          "id": 2
        },
        "rec": {
          "value": "value 2"
        }
      },
      {
        "key": {
          "id": 3
        },
        "rec": {
          "value": "value 3"
        }
      }
    ],
    "customer": [
      {
        "key": {
          "id": 4
        },
        "rec": {
          "address": "some address"
        }
      }
    ]
  },
  "date": "2024"
}

预期输出

[ {
  "date" : "2024",
  "id" : 4,
  "address" : "some address"
}, {
  "date" : "2024",
  "id" : 1,
  "value" : "value 1"
}, {
  "date" : "2024",
  "id" : 2,
  "value" : "value 2"
}, {
  "date" : "2024",
  "id" : 3,
  "value" : "value 3"
} ]

问题分析

原JOLT规范的问题在于第一个shift操作中,给customer和settings的元素分别指定了[&1].[0]和[&1].[1]的嵌套结构,导致customer[0]和settings[0]被合并到同一个子数组中,最终输出出现嵌套数组,不符合扁平化要求。

修正后的JOLT规范

[
  {
    "operation": "shift",
    "spec": {
      "date": "date",
      "object": {
        "*": {
          "*": {
            "@2,date": "[&1].date",
            "key": {
              "id": "[&2].id"
            },
            "rec": {
              "*": "[&3].&"
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "[]"
      }
    }
  }
]

规范说明

  1. 第一个shift操作:
    • 暂存顶层的date字段;
    • 遍历object下的所有子数组(customer和settings);
    • 对每个数组元素,提取顶层date、key.id以及rec下的所有字段(自动匹配address或value),将这些字段组合为独立对象按原数组索引暂存。
  2. 第二个shift操作:
    • 将暂存的所有对象统一放入一个新数组,实现完全扁平化。

验证结果

使用修正后的规范处理输入JSON,将得到与预期一致的扁平化数组输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:53:16