将 "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[]",
"*": "&"
}
}
]
我的源数据是一个巨大的扁平 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[]",
"*": "&"
}
}
]