2017-01-20 1 views
0

Sie wissen, wie XSLT und andere XML-Verarbeitungssprachen die "Null-Transformation" unterstützen, die ein Dokument unverändert weitergibt?gibt es eine Möglichkeit, eine Null-JSON-Transformation (durchläuft Orig-Dokument) mit Jolt zu schreiben?

Ich möchte das gleiche für Jolt tun (eine sehr nette JSON-Transformationsbibliothek, die in Apache Camel und anderen Orten verwendet wird).

Ich könnte JOLT "einfügen Standard" -Funktion verwenden und ein paar harmlose JSON-Tag und Wert auf der obersten Ebene des Dokuments .. das ist fast was wollen. Aber ich konnte mir nicht vorstellen, wie ich das Dokument durch JOLT passieren, aber es unberührt lassen würde.

Warum möchte ich dies tun, fragen Sie? Wir entwickeln eine Streaming-Datenpipeline und ich muss eingehende Strings als gültige JSON validieren ... Jolt macht das für mich kostenlos, aber in einigen Fällen möchte ich nicht mit dem Dokument herumspielen. Also, ich möchte JOLT als einen Schritt in der Pipeline verwenden, aber (in einigen Fällen) habe es nichts mit dem eingegebenen JSSON-Dokument zu tun.

Antwort

0

OOTB Jolt enthält 5 "Operationen", die auf den hydrierten Json-Eingang angewendet werden können. 4 davon (Standard, Entfernen, Sortieren, Kardinalität) sind Mutationsoperationen/Modifizieren der gelieferten hydratisierten Json. Ich gab diesen 4 eine leere "Spezifikation", sie würden nichts tun, und Ihre Daten würden "durchgehen".

Die "Shift" -Operation mutiert den eingegebenen Eingang nicht. Stattdessen "kopiert" es Daten von der "Eingabe" in eine neue "Ausgabe" -Map/Liste. Wenn Sie eine Spezifikation nicht "shift", dann kopiert es nichts über.

Also, von Ihnen Frage, es klingt, als ob Sie über "Verschiebung" sprechen. Mit Shift müssen Sie explizit alle Dinge durchgehen, die Sie behalten wollen.

Abhängig von Ihren Daten kann dies schrecklich oder einfach sein, da Sie sehr große Datenmengen kopieren können.

Beispiel für das "Inception" -Beispiel auf der Ruck-Demo-Site. http://jolt-demo.appspot.com/#inception

Diese Spezifikation geht im Prinzip durch die Eingabe und bewältigt die gesamte verschachtelte Karte, die durch den Ausgang "bewertet" wird. Spec

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "*": "&" 
    } 
    } 
] 
+0

Nochmals vielen Dank für die hervorragende Unterstützung, Milo. Kann ich annehmen, dass die wildcracked Schicht (* => &) eine ziemlich schnelle Operation ist? Konkret, glauben Sie, dass das so schnell wäre wie das Eingeben eines Standardschlüssels/-werts (z. B. "version:" "1.2.3") auf die oberste Ebene des json-Dokuments unter Verwendung der "Standard" -Operation. Wir werden mit der Frage transform gehen./cb –

+0

Ein einzelner "Standard" auf der obersten Ebene wird schneller sein. Die wildkarkierte Verschiebung (* => &) muss über jeden "Schlüssel" und "Wert" aus der Eingabezuordnung aufgerufen/kopiert werden. –

+0

haben es geschafft. Ich weiß, dass ich nicht Danke sagen soll ... Aber danke! –

1

Eine weitere Möglichkeit ist es, einen benutzerdefinierten Transformator zu schaffen:

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "rating": "rating" 
    } 
    } 
] 

Es kann mit Wildcards zu verallgemeinern.

package com.example; 
public class NullTransform implements Transform{ 

    @Override 
    public Object transform(Object input) { 
     return input; 
    } 

} 

dann aus dem als chainr Ruck Referenz unter

[ 
    { 
    "operation": "com.example.NullTransform" 
    { 
] 

Sie werden immer noch die deserializaion/Serialisierung-Overhead möglich, aber kein anderer Code ausgeführt wird.

Verwandte Themen