Толчок генерирует нулевые значения в качестве вывода преобразования и не может быть удален
У меня есть этот 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 spec:
[
{
"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"
} ]
Что может быть не так? В первое преобразование или в следующие две операции добавлено. Можно ли избежать этого с первой трансформации?
1 ответ
Причина, по которой у вас есть нулевые значения в вашем выходном массиве, заключается в том, что ваш входной массив "Item" содержит 7 элементов. И вы используете эти 7 признаков массива для определения выходного массива.
В частности эти строки
"Item": {
"*": {
"CategoryId": {
"ZCRM04": {
"@(2,Partner1)": "[&3].Partner1",
"@(2,Partner2)": "[&3].Partner2"
В примерах входных данных "ZCRM04" - это CategoryId в элементах массива Item 5, 6, 7.
Таким образом, первые 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"
}
}
}
}
]