JOLT - 在嵌套数组中加入数组
JOLT - Join arrays in nested array
我正在尝试实现以下转换。但是,我的解决方案将不需要的空值添加到最终数组中。
转换需要为所有 root
元素移动 child
数组中的名称。我创建了 3 个案例来说明问题。
案例一
输入
{
"root": [
{
"child": [
{
"name": "John"
},
{
"name": "Frazer"
}
]
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["John,Frazer","Brandon,Josef"]
}
情况二:一个child
为空
输入
{
"root": [
{
"child": []
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["","Brandon,Josef"]
}
情况 3:所有 child
都是空的
输入
{
"root": [
{
"child": []
},
{
"child": []
}
]
}
期望的输出
{
"NAMES": ["",""]
}
编辑: root
数组总是至少有 1 个元素。
当前的 JOLT 规范工作正常,但 child
为空数组的情况除外。它生成 null
值,我试图指定一个 空字符串 (或任何硬编码字符串值,例如 "NO_NAMES"
)
[
{
"operation": "shift",
"spec": {
"root": {
"*": {
"child": {
"*": {
"name": "NAMES[&3]"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"NAMES": {
"*": "=trim"
}
}
},
{
"operation": "cardinality",
"spec": {
"NAMES": "MANY"
}
},
{
"operation": "default",
"spec": {
"NAMES": []
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"NAMES": {
"*": "=join(',',@0)"
}
}
}
]
您可以应用连续转换 modify-overwrite-beta 然后 shift 以确定列表的逗号分隔元素( 除非它们的大小为零,这种情况下只会出现双引号),然后将它们连接在一个列表中,例如
[
{
"operation": "modify-overwrite-beta",
"spec": {
"root": {
"*": {
"child": { "*": "@(0,name)" },
"NAMES": "=join(',',@(1,child))"
}
}
}
},
{
"operation": "shift",
"spec": {
"root": {
"*": {
"NAMES": "&"
}
}
}
}
]
我正在尝试实现以下转换。但是,我的解决方案将不需要的空值添加到最终数组中。
转换需要为所有 root
元素移动 child
数组中的名称。我创建了 3 个案例来说明问题。
案例一
输入
{
"root": [
{
"child": [
{
"name": "John"
},
{
"name": "Frazer"
}
]
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["John,Frazer","Brandon,Josef"]
}
情况二:一个child
为空
输入
{
"root": [
{
"child": []
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["","Brandon,Josef"]
}
情况 3:所有 child
都是空的
输入
{
"root": [
{
"child": []
},
{
"child": []
}
]
}
期望的输出
{
"NAMES": ["",""]
}
编辑: root
数组总是至少有 1 个元素。
当前的 JOLT 规范工作正常,但 child
为空数组的情况除外。它生成 null
值,我试图指定一个 空字符串 (或任何硬编码字符串值,例如 "NO_NAMES"
)
[
{
"operation": "shift",
"spec": {
"root": {
"*": {
"child": {
"*": {
"name": "NAMES[&3]"
}
}
}
}
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"NAMES": {
"*": "=trim"
}
}
},
{
"operation": "cardinality",
"spec": {
"NAMES": "MANY"
}
},
{
"operation": "default",
"spec": {
"NAMES": []
}
},
{
"operation": "modify-overwrite-beta",
"spec": {
"NAMES": {
"*": "=join(',',@0)"
}
}
}
]
您可以应用连续转换 modify-overwrite-beta 然后 shift 以确定列表的逗号分隔元素( 除非它们的大小为零,这种情况下只会出现双引号),然后将它们连接在一个列表中,例如
[
{
"operation": "modify-overwrite-beta",
"spec": {
"root": {
"*": {
"child": { "*": "@(0,name)" },
"NAMES": "=join(',',@(1,child))"
}
}
}
},
{
"operation": "shift",
"spec": {
"root": {
"*": {
"NAMES": "&"
}
}
}
}
]