【问题标题】:Jolt Transformation to "unpivot" repeating columns into nested JSON array将重复列“反透视”到嵌套 JSON 数组中的 Jolt 转换
【发布时间】:2021-08-11 14:53:56
【问题描述】:

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

例如,下面的对象有两个“父”行和三个重复的列对,它们是“子”行:

{
  "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"
  } ]
}

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

【问题讨论】:

    标签: json jolt


    【解决方案1】:

    您可以使用两次 shift 转换,因为元素按 _1_2_3 的常用编号键分组strong> 在第一步中,然后删除这些对象的键,同时将它们嵌套在 codes 列表中,例如

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

    【讨论】:

    • 这很好,完全符合我的需要,尽管我认为您在 & 的第一个规范之前不小心省略了“_”前缀?在我的文件中,我有这种模式重复多次(诊断、治疗等),所以我可以使用这种方法并在每个组前面加上适当的标识符,以便通过第二个规范转换为数组,它应该无论有多少重复列,仍然有效!太棒了。
    • 也谢谢你@Mark;不,故意保持原样,例如。不需要加下划线,除了在第二个规范中过滤。
    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多