2017-05-23 5 views
-1

Ich versuche, eine Spezifikation zu erstellen, dieJSON-Ruck-Shift-Spezifikation für doppelte Schlüssel mit unterschiedlichen Werttypen?

abc:true 
abc: {strings ...} 

und Ausgang Eingang nehmen:

abc:true 
abc: {strings ...} 

Ich weiß, dass dies nicht eine Jolt Verschiebung erfordern sollte, ich es einfach so, dass Segment umfassen müssen meine Daten (beide abc Tasten) Übertragungen über und nicht verloren geht,

weiß jemand, was zu einer Verschiebung Jolt spec hinzufügen, um diese (Shift 2 doppelten Schlüssel zu tun, basierend auf th Eir Werttypen).

Antwort

0

Wenn Sie beim Ruck-Prozessor versuchen, bereits vorhandene Schlüsselzuordnungen hinzuzufügen, ruft die Anwendung Sie an. In Ihrem Fall scheint es sich jedoch um zwei verschiedene Arten von Speicher zu handeln, wobei 1 ein Array, das andere eine Variable ist. Der Prozessor scheint aus irgendeinem Grund Vorrang vor den Arrays über den einzelnen Werten zu haben, aber bitte nicht, es gibt viele Work-a-Runden dazu.

  1. Die erste und offensichtlichste Lösung "@":"&" innerhalb des Array-Index von abc passiert. According to the documentation of wildcards in the shift operations of jolt processors,

    • @ auf der linken Seite von : sein steht für als Index des übergebenen Schlüssel setzen.
    • & auf der rechten Seite von : steht für den Wert in Verbindung mit diesem übergebenen Index (eine Dereferenz, wenn Sie).

Gemeinsam werden diese alle Informationen mit der übergebenen Schlüssel zugeordnet ziehen. Jedoch, dies würde eine Duplizierung aller Array-Werte beinhalten, was in den meisten Fällen gegen Ihre Argumentation spricht, den Index neu zu ordnen.

  1. Die zweite Lösung, und vielleicht am besten wäre eine Neuzuordnung der Variablen. According to the wildcard documentation ermöglicht die # eine Referenzierung von Informationen. Auf der rechten Seite eines : wird es verwendet, um einen Index basierend auf der Anzahl der gefundenen Übereinstimmungen zu ziehen, während er durch seine Array-Information zurückläuft. Die linke Seite hat weit mehr Verwendung in unserem Fall, die uns erlauben eine Karte von einer Instanz Wert auf ein neues Feld

    "foo" :{ 
          "bar" : { 
           "#lemonade" : "drinks" 
    }} 
    

    Nach dem Beispiel von Bar den Code nehmen

hart codieren zu sein Als greifbares Wert Feld "foo", würden Sie dann einen Wert namens "Limonade" auf ein Feld namens "Getränke" zuordnen. Dadurch können Sie die Instanz behandeln, bei der abc anders ausgegeben wird als Ihr Standard-Array. Allerdings, dies ist eine harte Codierung und als solche kann es nicht auf die Booleschen Werte, die Sie ursprünglich suchten, gegossen werden.

  1. Die dritte und idealste Lösung ist eine ziemlich hinterhältige Art und Weise dieses Problem zu umgehen, die einen separaten Index mit den Feldern, die Sie werfen wollen zu schaffen. For reference and clarification to this technique, see here. Nehmen Sie den folgenden Code ein:

    [{ "operation" : "default", "spec":{ "ref":{ "True" : true, "False": false } } }, { "operation" : "shift", "spec":{ "abc":{ "true":{ "@(3,ref.true)":"abc" }, "false":{ "@(3,ref.false)":"abc" } } } }, { "operation" : "remove", "spec":{ "ref" : "" } }]

Was wir hier ist zu Beginn des Rucks Prozessor tun wir einen Referenzindex bilden ref genannt, die wir Werte von Booleschen passieren wahr und falsch für den späteren Gebrauch. Wir gehen weiter zur Shift-Operation, die wir dann tun, was wir in Beispiel 2 getan haben, indem wir anfangen zu zeigen, was wir tun, wenn dieser bestimmte Wert innerhalb des Eltern-Headers auftritt, stattdessen verwenden wir eine zusätzliche Funktion von @, um zurück zu verfolgen Baum 3 Eltern, und verwenden Sie die Referenzwerte der Felder True und False, um die erforderlichen Booleschen Werte an das Feld abc anzuhängen. Es ist alles aufgeräumt durch Entfernen der ref Feld, so dass alles, was Sie übrig bleiben, ist die korrekte Zuordnung von abc.

Diese Methode, wenn nicht das eleganteste, nicht nur die erste Frage umgeht, aber es Datentyp bewahrt und vielleicht erweitert werden, um eine Vielzahl von anderen Werten wie ganze Zahlen zu behandeln oder sogar verdoppelt, jedoch weitere Tests und Forschung wäre für solche Bemühungen erforderlich.

Verwandte Themen