Lade...
 

CX_JSON_OBJECT::PutTyped

CX_JSON_OBJECT::PutTyped
CX_JSON_ARRAY::PutTyped

169263
Beschreibung:

Diese Methode bietet eine einfache Alternative zu der Verwendung von SetDataType und Put / Link zum Einfügen von Elementen in die JSON-Struktur. Bei Put gibt immer das Datenfeld/der Slot in das eingefügt wird, den Datentyp vor und Put konvertiert dann den zu setzenden Wert in den entsprechenden Zieltyp. Dies ist bei Slots, die fest definierte Typen haben sehr sinnvoll, führt jedoch dazu, dass bei JSON-Objekten der Typ aller Felder ohne weitere Angabe STRING ist und somit per Put grundsätzlich alle Werte in STRINGS umgewandlet werden. Bsp:

2 json Put(age) // -> {"age":"2"}

Um den gewünschten Typen in ein JSON-Feld zu setzen, muss der Typ vorher per SetDataType festgelegt werden. Bsp:

"age" INTEGER json Call(SetDataType) 2 json Put(age) // -> {"age": 2}

 

Beim Erstellen eines größeren JSONs ist dieser Ansatz jedoch recht umständlich und falls keine Konvertierung beim Einfügen erwünscht ist, dann kann PutTyped verwendet werden. PutTyped verwendet dann den JSON-Datentypen, der am besten zu dem übergebenen Parameter passt. Die genaue Interpretation der untersützten Typen ist in der nachfolgenden Tabelle aufgefügt.

Typinterpretation
ClassiX-Typ JSON-Typ Beispiel (JSON-Format)
CX_JSON_OBJECT Object
{"age":3, "name":"tommy"}
CX_JSON_ARRAY Array
[ true, "a string", 123 ]
CX_NUMERIC number
12.345
CX_FLOAT number
12.345
INTEGER number
17
CX_INTEGER number
17
CX_BOOLEAN bool
true
STRING string
"Max Mustermann"
ML_STRING string
"Max Mustermann"

 

Bei PutTyped muss im Gegensatz zu Put/Link nicht zwischen Objekten und Primitivtypen unterschieden werden. Falls per SetDataType ein Typ für das zu setzende Feld gesetzt wurde, dann wird dieser Typ von PutTyped berücksichtigt und dann versucht auch PutTyped in diesen Zieltypen zu konvertieren.

 

Der Zugriffspfad-Parameter ist kein vollwertiger Zugriffspfad, Pfadelemente, wie hard, soft, call() werden hier nicht unterstützt.

 

Will man ein neues Element in ein JSON-Array einfügen und keinen bestehenden Eintrag überschreiben, dann muss als Index der Index des letzten Eintrags + 1 angegeben werden. Alternativ kann auch Insert oder die Append-Methode verwendet werden.
Falls das JSON-Array in welches eingefügt werden soll, direkt auf dem Stack liegt, dann reicht als Zugriffspfad der Index selbst. 

Var(object,array) CreateTransObject(CX_JSON_OBJECT) -> object "one" "elements[0]" object Call(PutTyped) // {elements:["one"]} // Append via next index "two" "elements[1]" object Call(PutTyped) // {elements:["one", "two"]} // Append directly into array object Get(elements) -> array // we can use 2 instead of "2", because of implicit parameter conversion (INTEGER->STRING) "three" 2 array Call(PutTyped) // {elements:["one", "two", "three"]} // Or simply use Insert "four" array Insert // {elements:["one", "two", "three", "four"]} // or Append "five" array Call(Append) // {elements:["one", "two", "three", "four", "five"]}

 

 

 

Code-Beispiel:
Var(json, true, false) CreateTransObject(CX_BOOLEAN) TRUE Over Put -> true CreateTransObject(CX_BOOLEAN) FALSE Over Put -> false CreateTransObject(CX_JSON_ARRAY) -> json "john" "firstName" json Call(PutTyped) "miller" "name" json Call(PutTyped) 34 "age" json Call(PutTyped) true "married" json Call(PutTyped) // Access to "wife.firstName" implicitly creates a JSON object at "wife" "clara" "wife.firstName" json Call(PutTyped) "miller" "wife.name" json Call(PutTyped) 31 "wife.age" json Call(PutTyped) // Access to "children[0].firstName" implicitly creates an array "children" and an object at "children[0]" "jimmy" "children[0].firstName" json Call(PutTyped) "miller" "children[0].name" json Call(PutTyped) 12 "children[0].age" json Call(PutTyped) "freddy" "children[1].fistName" json Call(PutTyped) "miller" "children[1].name" json Call(PutTyped) 11 "children[1].age" json Call(PutTyped) // Copy children into "wife" object json Get(children) "wife.children" json Call(PutTyped) // Result-JSON { "firstName": "john", "name": "miller", "age": 34, "married": true, "wife": { "firstName": "clara", "name": "miller", "age": 31, "children": [ { "firstName": "jimmy", "name": "miller", "age": 12 }, { "firstName": "freddy", "name": "miller", "age": 11 } ] }, "children": [ { "firstName": "jimmy", "name": "miller", "age": 12 }, { "firstName": "freddy", "name": "miller", "age": 11 } ] }

 

 

Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top

CX_JSON_OBJECT
CX_JSON_ARRAY

Die JSON-Struktur in welche eingefügt werden soll
  Top-1 STRING Der Zugriffspfad zum Feld, welches gesetzt werden soll
  Top-2 ANY Der zu setzende Feldwert
Stack(Out) Top

-

 
Funktionsaufruf: Call(PutTyped)