Rucktransformations-JSON-Spezifikation für Array-Eingabe

Aug 27 2020

Ich versuche, einen JOLT-Schaltvorgang mit der folgenden Spezifikation durchzuführen, der nicht funktioniert. Ich bin mir nicht sicher, welchen Fehler ich gemacht habe. Benötigen Sie Hilfe in diesem Fall. Ausgabe JSON wird als Objekt anstelle von Array und Shift geliefert und funktioniert auch nicht wie erwartet.

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

Antworten

1 kasptom Aug 27 2020 at 20:46

Sie müssen auch angeben, dass sich das "Header"Objekt innerhalb des Arrays befindet .

Darüber hinaus der Index des Arrays, in dem Sie das "Header"Objekt für jedes Element des Arrays platzieren.

Dies ist, was die folgende Spezifikation tut (unter Verwendung des Platzhalters[&1] - apmersand in Kombination mit einem Array):

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

Quellen:

  1. Shiftr.java javadocs :
    • Die Arrays
    • Der kaufmännische Und-Platzhalter
  2. Andere Antwort: "Wie transformiere ich ein Array mit Jolt?"
  3. Demo-Anwendung, die im Ruck-Repo verlinkt ist , um die Spezifikation zu testen