Lade...
 

CX_JSON_OBJECT

CX_JSON_OBJECT

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

Im Verlgeich zu den regulären Zugriffspfaden haben die Bezeichner hardsoft this innerhalb des Pfades keine besondere Bedeutung.

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.

Da da es sich bei den CX_JSON_OBJECT und CX_JSON_ARRAY-Objekten, die man über Get(...) und GetTyped vom Wurzelknoten erhält, nur um Referenzen oder Views handelt, muss immer darauf geachtet werden, dass sie nicht mehr verwendet werden, sobald das Wurzelelement ungültig wird. Will man unabhängig vom Wurzelelement darauf arbeiten, muss die Struktur komplett in ein neues Wurzelelement kopiert werden.
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
//    }
//  }

 

Methodenverzeichnis (MDI)
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)

 

Datenverzeichnis (DDI)
Datenfeld Typ Referenz-Klasse I* Kurzbeschreibung
* * *   Dynamisches DDI, welches der Datenstruktur des JSONs entspricht.

* I = Indizierbares Datenfeld

 

Verwendung in AppsWH
Modul Kurzbeschreibung