【发布时间】:2021-07-05 11:00:48
【问题描述】:
我正在尝试实现以下转换。但是,我的解决方案将不需要的 null 值添加到最终数组中。
转换需要在child 数组中为所有root 元素移动名称。我创建了 3 个案例来说明问题。
案例一
输入
{
"root": [
{
"child": [
{
"name": "John"
},
{
"name": "Frazer"
}
]
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["John,Frazer","Brandon,Josef"]
}
案例2:一个child为空
输入
{
"root": [
{
"child": []
},
{
"child": [
{
"name": "Brandon"
},
{
"name": "Josef"
}
]
}
]
}
期望的输出
{
"NAMES": ["","Brandon,Josef"]
}
案例 3:所有childs 都是空的
输入
{
"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)"
}
}
}
]
【问题讨论】:
-
嗨大卫,你目前使用什么规格?
-
嗨@BarbarosÖzhan,再次感谢您的帮助。我已经添加了我当前的规格。
default节点是我的尝试之一,但并不能帮助我实现目标。 -
这是我的主要问题。我需要它改为
{ "NAMES" : [ "", "" ] }。或{ "NAMES" : [ "NO_NAMES", "NO_NAMES" ] }。两种解决方案都是有效的。NAMES的长度应与root相同。
标签: apache-nifi jolt