CX_JSON_OBJECT::PutTyped
CX_JSON_ARRAY::PutTyped
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.
ClassiX-Typ | JSON-Typ | Beispiel (JSON-Format) |
---|---|---|
CX_JSON_OBJECT | Object |
|
CX_JSON_ARRAY | Array |
|
CX_NUMERIC | number |
|
CX_FLOAT | number |
|
INTEGER | number |
|
CX_INTEGER | number |
|
CX_BOOLEAN | bool |
|
STRING | string |
|
ML_STRING | string |
|
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 | Position | Objekttyp | Kurzbeschreibung |
---|---|---|---|
Stack(In) | Top | 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 |
- |