Создание комплексного вывода массива с использованием JOLT - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь преобразовать JSON в сложный массив.Внутренний массив INVLOC генерирует не так, как я хочу.

Мой ввод json:

    {
  "valid": "true",
  "message": "",
  "data": {
    "ARINVT01": [
      {
        "firstName": "andrew",
        "lastname": "Gilly",
        "INVLOC": {
          "data": [
            {
              "mmm": "MAIN",
              "nnn": "0.000"
            },
            {
              "mmm": "A1",
              "nnn": "0.000"
            }
          ]
        }
      },
      {
        "firstName": "Jack",
        "lastname": "watson",
        "INVLOC": {
          "data": [
            {
              "mmm": "MAIN",
              "nnn": "0.000"
            }
          ]
        }
      }
    ]
  }
}

Ожидаемый вывод:

    [
  {
    "FNAME": "andrew",
    "LNAME": "Gilly",
    "INVBALANCES": [
      {
        "user": "MAIN",
        "CURBAL": "0.000"
      },
      {
        "user": "A1",
        "CURBAL": "0.000"
      }
    ]
  },
  {
    "FNAME": "Jack",
    "LNAME": "watson",
    "INVBALANCES": [
      {
        "user": "A1",
        "CURBAL": "0.000"
      }
    ]
  }
]

Моя спецификация:

  [
  {
    "operation": "shift",
    "spec": {
      "data": {
        "ARINVT01": {
          "*": {
            "firstName": "[&1].FNAME",
            "lastname": "[&1].LNAME",
            "INVLOC": {
              "data": {
                "*": {
                  "mmm": "[&1].INVBALANCES.[#1].user",
                  "nnn": "[&1].INVBALANCES.[#1].CURBAL"
                }
              }
            }
          }
        }
      }
    }
  }

]

Получение вывода:

    [ {
  "FNAME" : "andrew",
  "LNAME" : "Gilly",
  "INVBALANCES" : [ {
    "user" : "MAIN"
  }, {
    "CURBAL" : "0.000"
  } ]
}, {
  "INVBALANCES" : [ {
    "user" : "A1"
  }, {
    "CURBAL" : "0.000"
  } ],
  "FNAME" : "Jack",
  "LNAME" : "watson"
} ]

Может ли кто-нибудь помочь мне с моей спецификацией?

А также, если я смогу получить какое-то руководство по пониманию преобразования массивов JOLT.

1 Ответ

0 голосов
/ 15 мая 2018

Spec

 [
   {
     "operation": "shift",
     "spec": {
       "data": {
         "ARINVT01": {
           "*": { // array index of ARINVT01
             // 
             //             &0 is "firstName"
             //             &1 is the current array index of ARINVT01
             "firstName": "[&1].FNAME",
             "lastname":  "[&1].LNAME",
             "INVLOC": {
               "data": {
                 "*": { // array index of data array
                   //
                   //       &0 is "mmm"
                   //       &1 is the current array index of the data array
                   //       &2 is "data"
                   //       &3 is "INVLOC"
                   //       &4 is the current array index of ARINVT01
                   //  basically the "&" "number" logic is 
                   //   how many levels to walk back up the document
                   //   to lookup the currently matched value
                   "mmm": "[&4].INVBALANCES.[&1].user",
                   "nnn": "[&4].INVBALANCES.[&1].CURBAL"
                 }
               }
             }
           }
         }
       }
     }
  }
]
...