Jolt 生成空值作为转换输出并且无法删除
Jolt generates null values as transformation output and can't be removed
我有这个 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": ""
}
}
但是不行,结果差不多,只是现在出现的不是null "TRASH":
[ "TRASH", "TRASH", "TRASH", "TRASH", {
"Partner1" : "0072938067",
"Partner2" : "0072938063"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072937669"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072938065"
} ]
有什么问题吗?在第一个转换中或在接下来的两个操作中添加。有没有可能从第一次转换就避免这种情况?
您的输出数组中有空值的原因是因为您的输入 "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,如果您想要 "filter" 数组元素和 modify/change 这些数组元素的内容,您需要执行两个步骤。
规格
[
{
"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"
}
}
}
}
]
我有这个 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": ""
}
}
但是不行,结果差不多,只是现在出现的不是null "TRASH":
[ "TRASH", "TRASH", "TRASH", "TRASH", {
"Partner1" : "0072938067",
"Partner2" : "0072938063"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072937669"
}, {
"Partner1" : "0072938063",
"Partner2" : "0072938065"
} ]
有什么问题吗?在第一个转换中或在接下来的两个操作中添加。有没有可能从第一次转换就避免这种情况?
您的输出数组中有空值的原因是因为您的输入 "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,如果您想要 "filter" 数组元素和 modify/change 这些数组元素的内容,您需要执行两个步骤。
规格
[
{
"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"
}
}
}
}
]