我将此JSON作为输入:
{
"BusinessInfo": {
"MemberInformation": {
"Item": [
{
"Relation": {
"Item": [
{
"Partner1": "0072938063",
"Partner2": "0072938064",
"CategoryId": "BUR001"
},
{
"Partner1": "0072938063",
"Partner2": "0072937669",
"CategoryId": "ZCRM06"
},
{
"Partner1": "0072938063",
"Partner2": "3000011685",
"CategoryId": "ZCRM06"
},
{
"Partner1": "1020002423",
"Partner2": "0072938063",
"CategoryId": "ZCRM01"
},
{
"Partner1": "0072938067",
"Partner2": "0072938063",
"CategoryId": "ZCRM04"
},
{
"Partner1": "0072938063",
"Partner2": "0072937669",
"CategoryId": "ZCRM04"
},
{
"Partner1": "0072938063",
"Partner2": "0072938065",
"CategoryId": "ZCRM04"
}
]
}
}
]
}
}
}
这个Jolt规范:
[
{
"operation": "shift",
"spec": {
"BusinessInfo": {
"MemberInformation": {
"Item": {
"*": {
"Relation": {
"Item": {
"*": {
"CategoryId": {
"ZCRM04": {
"@(2,Partner1)": "[&3].Partner1",
"@(2,Partner2)": "[&3].Partner2"
}
}
}
}
}
}
}
}
}
}
}
]
结果如下:
[ null, null, null, null, {
"Partner1" : "0072938067",
"Partner2" : "0072938063"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072937669"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072938065"
} ]
问题在于生成了空值。我需要相同的结果,但没有它们。我尝试删除它们将此操作添加到规范:
{
"operation": "default",
"spec": {
"*": "TRASH"
}
},
{
"operation": "remove",
"spec": {
"TRASH": ""
}
}
但是不起作用,结果几乎相同,只是现在而不是空出现" TRASH":
[ "TRASH", "TRASH", "TRASH", "TRASH", {
"Partner1" : "0072938067",
"Partner2" : "0072938063"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072937669"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072938065"
} ]
可能有什么不对?在第一次转换或在接下来的两次操作中添加。可以从第一次转换中避免这种情况吗?
答案 0 :(得分:1)
输出数组中有空值的原因是因为你的输入" Item"数组中有7个元素。并且您正在使用这7个数组指示来确定输出数组。
特别是这些行
"Item": {
"*": {
"CategoryId": {
"ZCRM04": {
"@(2,Partner1)": "[&3].Partner1",
"@(2,Partner2)": "[&3].Partner2"
您的样本输入数据," ZCRM04"是Item数组元素5,6,7中的CategoryId。
所以第一个0到4个元素不匹配,但元素5不匹配,规范说来自" @(2,Partner1)"到输出数组的第5个索引。
"[&3].Partner1" --> "[5].Partner1"
所以在这种情况下,shift会产生一个包含6个元素的输出数组,其中0到4的元素为空。
使用Jolt,如果你想"过滤"数组元素和修改/更改那些数组元素的内容,需要做两个步骤。
规格
[
{
"operation": "shift",
"spec": {
"BusinessInfo": {
"MemberInformation": {
"Item": {
"*": {
"Relation": {
"Item": {
"*": {
"CategoryId": {
"ZCRM04": {
// in this first shift
// just "identify" all the
// Item entries needs
"@2": "temp[]"
}
}
}
}
}
}
}
}
}
}
},
{
"operation": "shift",
"spec": {
"temp": {
"*": {
// now for each original "Item"
// "fix" it.
// In this case only pass thru
// Partner1 and 2
"Partner1": "[&1].Partner1",
"Partner2": "[&1].Partner2"
}
}
}
}
]