将 "unpivot" 重复列转换为嵌套 JSON 数组

Jolt Transformation to "unpivot" repeating columns into nested JSON array

我的源数据是一个巨大的扁平 CSV,其中包含我想要规范化并存储在多个单独数据库表中的数据。我想知道我是否可以使用 JOLT 转换来改变我的 CSV 数据的结构,我已经是一个扁平的 JSON 对象。

例如,下面的对象有两个 'parent' 行和三对重复的列,它们是 'child' 行:

{
  "id": 1,
  "name": "zzz",
  "code_1": "abc",
  "date_1": "2021-01-01",
  "code_2": "def",
  "date_2": "2021-01-02",
  "code_3": "ghi",
  "date_3": "2021-01-03"
}

我可以使用 JOLT 生成输出吗:

{
  "id": 1,
  "name": "zzz",
  "codes": [
    {
      "code": "abc",
      "date": "2021-01-01"
    },
    {
      "code": "def",
      "date": "2021-01-02"
    },
    {
      "code": "ghi",
      "date": "2021-01-03"
    }
  ]
}

我试过 Jolt Playground,但我还没有找到可以实现这个目标的东西。

欢迎任何提示、提示或指点。

提前致谢。

更新:

我越来越接近,具有以下规范和输出。然而,我的代码和日期在不同的对象中:

规格:

[
  {
    "operation": "shift",
    "spec": {
      "identifier": "id",
      "name": "name",
      "code*": "codes[].code",
      "date*": "codes[].date"
    }
  }
]

输出:

{
  "id" : 1,
  "name" : "zzz",
  "codes" : [ {
    "code" : "abc"
  }, {
    "date" : "2021-01-01"
  }, {
    "code" : "def"
  }, {
    "date" : "2021-01-02"
  }, {
    "code" : "ghi"
  }, {
    "date" : "2021-01-03"
  } ]
}

(编辑:更正了所需的输出。)

您可以使用 shift 转换两次,因为元素按 _1,_2,_3 在第一步中,然后删除这些对象的键,同时将它们嵌套在 codes 列表中,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "code*": { "@": "&(0,1).code" },
      "date*": { "@": "&(0,1).date" }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "_*": "codes[]",
      "*": "&"
    }
  }
]