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.
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.
- 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.
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.