CX_JSON_OBJECT
Klassenhierarchie
- CX_CLASS
- CX_JSON_OBJECT 168573
Beschreibung:
Diese Klasse repräsentiert ein JSON-Objekt. Auf die Elemente in der JSON-Struktur kann auf die gleiche Weise zugegriffen werden, wie auf das DDI einer Klasse. Intern generiert das CX_JSON_OBJECT auch ein DDI, damit die Felder des JSON-Objekts im Objekt-Inspector untersucht und verändert werden können.
In dem JSON-Objekt sind alle untergeordnenten JSON-Objekte und -Arrays nur Referenzen auf Datenstrukturen innerhalb des Wurzel-Objekts.
Beispiel: Sei folgendes JSON gegeben {"name":"charlie", "son":{"name":"jack"}}, dann liefern json Copy(name) und "name" json Call(GetTyped) beide den String charlie. Die Aufrufe json Get(son) und "son" json Call(GetTyped) liefern ein CX_JSON_OBJECT, welches den JSON-Ausschnitt {"name":"jack"} repräsentiert. Auf diesem Objekt kann, wie auf dem vorherigen Objekt mit Copy(name) der name ausgelesen werden.
Alternativ kann dies auch auf dem Wurzelelement über einen Zugriffsausdruck getan werden: json Copy(son.name) oder "son.name" json Call(GetTyped).
Die einzige besondere Bedeutung hat this zu Beginn eines Zugriffsausdrucks und referenziert das Objekt selbst. Diese Sonderregel spielt lediglich für CX_JSON_ARRAY eine Rolle, weil
ary Copy([0])
ungültig ist und deshalb als
ary Copy(this[0])
geschrieben werden muss.
Das kann man mittels Copy(...) oder CopyTransObject erreichen.
173936:
Bei der Rückgabe von Zahlenwerten werden immer 8 Nachkommastellen zurückgegeben.
Wird ein nicht existierendes Feld (hier x) abgefragt, ist das Verhalten wie folgt definiert:
Aufruf | Ergebnis |
---|---|
"x" json Call(HasTyped)
|
0 (FALSE) |
"x" json Call(GetTyped)
|
INVALID |
json Type(x)
|
0 |
json Get(x)
|
INVALID |
json Copy(x)
|
INVALID |
Code-Beispiel:
Var(person) CreateTransObject(CX_JSON_OBJECT) -> person //empty JSON object "Jack" person Put(name) 12 person Put(age) //will be written as String (default type) person "friend" person Call(PutTyped)//insert person into person itself "Peter" person Put(friend.name) 13 "friend.age" person Call(PutTyped) "father" CX_JSON_OBJECT person Call(SetDataType) CreateTransObject(CX_JSON_OBJECT) person Put(father) "John" person Put(father.name) 45 "father.age" person Call(PutTyped) "father.married" CX_BOOLEAN person Call(SetDataType) TRUE person Put(father.married) person //-> CX_JSON_OBJECT: // { // "name":"Jack", // "age":"12", // "friend": // { // "name":"Peter", // "age":13 // }, // "father": // { // "name":"John", // "age":45, // "married":true // } // }
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
ClearDataType 176859 |
STRING | Setzt den Typ eines vorher gesetzten Pfades wieder auf den Default-Wert zurück. | ||
GetKeys 212642 |
VECTOR〈STRING〉 | Liefert die Namen aller Felder, in diesem JSON-Objekt | ||
GetTyped 168869 |
STRING | ANY | Liefert den Wert eines Zugriffspfads (Keine Unterscheidung, wie zwischen Copy/Get nötig) | |
GetTypedLiteralField 232128 |
STRING | ANY | Liefert den Wert eines Objekt-Felds (ohne Pfadnavigation) | |
HasTyped 170077 |
STRING | TRUE/FALSE | TRUE, falls es einen Wert für den Zugriffspfad gibt | |
HasTypedLiteralField 232128 |
STRING | TRUE/FALSE | TRUE, falls es einen Wert für den Feldnamen gibt (ohne Pfadnavigation) | |
PutTyped 169263 |
ANY, STRING | Setzt den Wert eines Zugriffspfads | ||
PutTypedLiteralField 232128 |
ANY, STRING | Setzt den Wert eines Objekt-Felds (ohne Pfadnavigation) | ||
Remove 232557 |
STRING | Entfernt den Wert eines Zugriffspfads | ||
SetDataType | STRING, TYPE | Setzt den Typ des angegebenen Pfads für Get/Copy, Put, ... |
* MA = Member-Access-Funktion
TYPE = Typ-ID von (STRING | INTEGER | CX_NUMERIC | CX_BOOLEAN | CX_JSON_OBJECT | CX_JSON_ARRAY)
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
* | * | * | Dynamisches DDI, welches der Datenstruktur des JSONs entspricht. |
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|