Jolt Transform JSON Spec untuk Array Input

Aug 27 2020

Saya mencoba melakukan operasi shift JOLT dengan spesifikasi di bawah ini yang tidak berfungsi. Tidak yakin kesalahan apa yang telah saya lakukan. Butuh bantuan dalam kasus ini. Output JSON datang sebagai objek, bukan Array, dan shift juga tidak berfungsi seperti yang diharapkan.

    Input : [
      {
        "Header": {
          "Number": 1,
          "Id": "JO"
        },
        "Name": "John"
      },
      {
        "Header": {
          "Number": 2,
          "Id": "JS"
        },
        "Name": "Justin"
      }
    ]
    Spec : [
      {
        "operation": "shift",
        "spec": {
          "*": {
            "Header": "Header",
            "Name": "Header.Name"
          }
        }
      }
    ]
    Expected Output : [
      {
        "Header": {
          "Number": 1,
          "Id": "JO",
          "Name": "John"
        }    
      },
      {
        "Header": {
          "Number": 2,
          "Id": "JS",
          "Name": "Justin"
        }    
      }
    ]
    Actual Output : {
      "Header" : [ {
        "Number" : 1,
        "Id" : "JO",
        "Name" : "John"
      }, {
        "Number" : 2,
        "Id" : "JS"
      } ]
    }

Jawaban

1 kasptom Aug 27 2020 at 20:46

Anda juga harus menentukan bahwa "Header"objek tersebut berada di dalam array .

Selain itu, indeks larik tempat Anda menempatkan "Header"objek untuk setiap elemen larik.

Itulah yang dilakukan spesifikasi di bawah ini (menggunakan wildcard[&1] - apmersand yang dikombinasikan dengan array):

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "Header": "[&1].Header",
        "Name": "[&1].Header.Name"
      }
    }
  }
]

Sumber:

  1. Shiftr.java javadocs :
    • Array
    • Karakter pengganti ampersand
  2. Jawaban lain: "Bagaimana cara mengubah array menggunakan Jolt?"
  3. Aplikasi demo ditautkan dalam repo sentakan untuk menguji spesifikasi