Преобразование толчка с использованием вложенного массива

#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"
      } ]
    } ]
  } ]
}