web-dev-qa-db-de.com

JSON-zu-JSON-Transformator

Ich habe ein Szenario.

Erforderliche Eingabe und Ausgabe sind JSON.

// Input
{
  "OldObject": {
    "Time": 1351160457922,
    "Name": "OName",
    "quantity": 100,
    "price": 10
  }
}


// Output
{
  "NewObject": {
    "Time": 1351160457922,
    "Title": "OName",
    "quantity": 100
  }
}

Ich brauche etwas Transformationscode oder vorzugsweise XSLT-Sprache, um Json von einem Format in ein anderes zu transformieren. Dieser Transformator muss auch schnell sein, da die Transformation im laufenden Betrieb erfolgt.

Bearbeiten
Ich habe keine Definition des INPUT-Objekts erhalten, und es kann sich zur Laufzeit ändern. Ich kann jedoch Klasse für das OUTPUT-Objekt verwenden, wenn dies erforderlich ist. Ich habe versucht, dies als json -> xml -> xslt -> xml -> json auszuführen, aber pro Sekunde werden ungefähr 1000 Objekte empfangen Dieses Ende und dieser Prozess kann Overhead verursachen.
Ich kann JavaScript auch nicht verwenden, da myApp eine einfache Windows-basierte Java-Anwendung ist und die Verwendung von JavaScript kann Overhead verursachen. 

21

Sie können ZORBA und JsonIQ http://www.jsoniq.org/ Verwenden. Es handelt sich jedoch um eine native Bibliothek. Sie wird mit einem Wrapper geliefert, sodass Sie sie in Java verwenden können.

4
mvallebr

Versuchen Sie RUCK . Es ist eine JSON-zu-JSON-Transformationsbibliothek, die in Java geschrieben ist. Es wurde in einem Projekt erstellt, das viele JSON-Dateien von einem ElasticSearch-Backend in eine Frontend-API konvertierte.

Für die JSON-Transformation, die Sie in Ihrem Problem aufgelistet haben, würde die Jolt-Verschiebungsspezifikation lauten:

// Jolt "shift" spec
{
    "OldObject": {
        "Time": "NewObject.Time",   
        "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value
                                   // to "NewObject.Title
        "quantity": "NewObject.quantity"
    }
}
18
Milo S

Sie können diese Umwandlung mit JSON Patch durchführen.

Beispiel mit jsonpatch-js :

var transformations = [
  { move: '/OldObject', to: '/NewObject' },
  { remove: '/NewObject/price' },
  { move: '/NewObject/Name', to: '/NewObject/Title' }
];

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } };

jsonpatch.apply(oldObject, transformations);

Ich habe das nicht getestet, sollte aber so funktionieren.

10
KARASZI István
1
Udhaya

Eine weitere Option ist die Verwendung von Logz.io Sawmill library. Sie definieren eine Pipeline und führen sie aus. Für dein Beispiel:

{
  steps: [
    {
      rename {
         config {
            from: "OldObject"
            to: "NewObject"
         }
      }
    }

    {
      removeField {
        config {
          path: "NewObject.price"
        }
      }
    }

    {
      rename {
        config {
          from: "NewObject.Name"
          to: "NewObject.Title"
        }
      }
    }
  ]
}
1
Asaf Mesika

Sie können die Java-Bibliothek Silencio ausprobieren, mit der Sie jeden Knoten der JSON-Datei in neue Werte konvertieren können. Sie können entscheiden, welche und wie Knoten transformiert werden sollen.

0
Damian