#nested #jolt
Вопрос:
Я пытаюсь написать спецификацию для выполнения приведенного ниже преобразования с помощью jolt. Для каждого вложенного элемента массива я добавляю соответствующий элемент массива в вывод на этом уровне для типа «X», «Y». Это работает нормально. Элемент типа «MX» имеет массив «значения», каждый элемент внутри значений должен стать строкой на том же уровне, что и элемент «MX». Вместо добавления нескольких строк при обработке элемента типа «MX» для массива «значения», он добавляет данные в одну строку. Как я могу получить ожидаемый результат? Пожалуйста, помогите.
Ввод json
{
"attributes": [
{
"children": [
{
"type": "X",
"label": "test1",
"key": "test1"
},
{
"type": "Y",
"label": "test2",
"key": "test2"
},
{
"type": "MX",
"values": [
{
"value": "one",
"key": "1"
},
{
"value": "two",
"key": "2"
}
]
},
{
"children": [
{
"type": "X",
"label": "X1",
"key": "X1"
}
]
}
]
}
]
}
спецификация встряски:
[
{
"operation": "shift",
"spec": {
"attributes": {
"*": {
"children": {
"*": {
"type": {
"X": {
"#X": "elem[amp;5].children[amp;3].type",
"@(2,label)": "elem[amp;5].children[amp;3].label",
"@(2,key)": "elem[amp;5].children[amp;3].key"
},
"Y": {
"#Y": "elem[amp;5].children[amp;3].type",
"@(2,label)": "elem[amp;5].children[amp;3].label",
"@(2,key)": "elem[amp;5].children[amp;3].key"
},
"MX": {
"@(2,values)": {
"*": {
"#MX": "elem[amp;7].children[amp;5].type",
"value": "elem[amp;7].children[amp;5].label",
"key": "elem[amp;7].children[amp;5].key"
}
}
}
},
"children": {
"*": {
"type": {
"X": {
"#X": "elem[amp;7].children[amp;5].children[amp;3].type",
"@(2,label)": "elem[amp;7].children[amp;5].children[amp;3].label",
"@(2,key)": "elem[amp;7].children[amp;5].children[amp;3].key"
}
}
}
}
}
}
}
}
}
}
]
Expected output
"elem" : [ {
"children" : [ {
"type" : "X",
"label" : "test1",
"key" : "test1"
}, {
"type" : "Y",
"label" : "test2",
"key" : "test2"
}, {
"type" : "MX",
"label" : "one",
"key" : "1"
},
{
"type" : "MX",
"label" : "two",
"key" : "2"
},
{
"children" : [ {
"type" : "X",
"label" : "X1",
"key" : "X1"
} ]
} ]
} ]
}
Getting:
{
"elem" : [ {
"children" : [ {
"type" : "X",
"label" : "test1",
"key" : "test1"
}, {
"type" : "Y",
"label" : "test2",
"key" : "test2"
}, {
"type" : [ "MX", "MX" ],
"label" : [ "one", "two" ],
"key" : [ "1", "2" ]
}, {
"children" : [ {
"type" : "X",
"label" : "X1",
"key" : "X1"
} ]
} ]
} ]
}