TbeCbAnything
ab Version 7.2.1.2 Diese Klasse ermöglicht den Umgang mit JSON-Objekten. Damit können JSON-Objekte erstellt, modifiziert, gespeichert oder geladen und ausgelesen werden.
Hinweis
-
aPath:A ist ein eindimensionales Array mit Zahlen und/oder String Werten welche den Pfad zu einem JSON-Element beschreibt. Eine Zahl steht für den Zugriff auf das Element an der x-ten Stelle. Ein String steht für den Zugriff über den Schlüssel-Namen (Key) des Elements.
Eigenschaften
|
Eigenschaft |
Beschreibung |
|---|---|
|
ConverterOptions:O |
nur lesend. Dient zur Steuerung von String-Konvertierungen. |
|
Name:C |
|
|
Tag:N |
|
Methoden
|
Methode |
Beschreibung |
|---|---|
|
KeyIsNull(aKey:C):L |
|
|
LoadFromFile(aFileName:C) |
Liest das JSON-Objekt aus einer Datei ein. |
|
SaveToFile(aFileName:C, aFormatted:L) |
Speichert das JSON-Objekt in eine Datei. |
|
FromYaml(aYaml:C) |
Liest das JSON-Objekt von einem String im YAML-Format ein. (ab Version 7.6.1.7) |
|
ToYaml():C |
Gibt das JSON-Objekt als String im YAML-Format zurück (ab Version 7.6.1.7) |
|
LoadFromYamlFile(aFileName:C) |
Liest das JSON-Objekt im YAML-Format aus einer Datei ein. (ab Version 7.6.1.7) |
|
SaveToYamlFile(aFileName:C) |
Speichert das JSON-Objekt im YAML-Format in eine Datei. (ab Version 7.6.1.7) |
|
DeletePath(aPath:U):L |
Löscht ein Element.Rückgabe True, falls Löschung erfolgreich war. |
|
PathExists(aPath:U):L |
True falls der Pfad existiert. |
|
PathIsNull(aPath:U):L |
|
|
RenameKeyPath(aPath:U, aNewKey:C):L |
Benennt ein Element um.Rückgabe True, falls Umbenennung erfolgreich war. |
|
ValueType(aPath:U):N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
getString(aPath:U):C |
Liefert für das Element den Wert als String. Fehler falls das Element nicht vom Typ String ist oder dieses nicht existiert. |
|
getInteger(aPath:U):N |
Liefert für das Element den Wert als Integer. Fehler falls das Element nicht vom Typ Integer ist oder dieses nicht existiert. |
|
getExtended(aPath:U):N |
Liefert für das Element den Wert als Extended. Fehler falls das Element nicht vom Typ Extended ist oder dieses nicht existiert. |
|
getBoolean(aPath:U):L |
Liefert für das Element den Wert als Boolean. Fehler falls das Element nicht vom Typ Boolean ist oder dieses nicht existiert. |
|
getTimestamp(aPath:U):N |
Liefert für das Element den Wert als DateTime. Fehler falls das Element nicht vom Typ DateTime ist oder dieses nicht existiert. |
|
getDate(aPath:U):N |
Liefert für das Element den Wert als DateTime. Fehler falls das Element nicht vom Typ String im Format “YYYY-MM-DD“ ist oder dieses nicht existiert. |
|
getObject(aPath:U):O |
Liefert das Element als Objekt (*TbeCbAnything*). Fehler falls das Element nicht vom Typ Objekt ist oder dieses nicht existiert. |
|
getArray(aPath:U):O |
Liefert das Element als Array (*TbeCbAnythingArray*). Fehler falls das Element nicht vom Typ Array ist oder dieses nicht existiert. |
|
getStringDef(aPath:U, aDefault:C):C |
Verhält sich wie *getString()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getIntegerDef(aPath:U, aDefault:N):N |
Verhält sich wie *getInteger()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getExtendedDef(aPath:U, aDefault:N):N |
Verhält sich wie *getExtended()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getBooleanDef(aPath:U, aDefault:L):L |
Verhält sich wie *getBoolean()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getTimestampDef(aPath:U, aDefault:N):N |
Verhält sich wie *getTimestamp()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getDateDef(aPath:U, aDefault:N):N |
Verhält sich wie *getDate()* mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. |
|
getObjectDef(aPath:U):O |
Verhält sich wie *getObject()*mit der Ausnahme, dass falls das Element nicht existiert, ein Default Objekt anstelle eines Fehlers zurückgegeben wird.Weitere Verknüpfungen*IsDefault()*. |
|
getArrayDef(aPath:U):O |
Verhält sich wie *getArray()*mit der Ausnahme, dass falls das Element nicht existiert, ein Default Array anstelle eines Fehlers zurückgegeben wird. Siehe auch*IsDefault()*. |
|
appendString(aKey:C, aValue:C) |
Fügt ein String-Element hinzu. |
|
appendInteger(aKey:C, aValue:N) |
Fügt ein Integer-Element hinzu. |
|
appendExtended(aKey:C, aValue:N) |
Fügt ein Extended-Element hinzu. |
|
appendBoolean(aKey:C, aValue:L) |
Fügt ein Boolean-Element hinzu. |
|
appendTimestamp(aKey:C, aValue:N) |
Fügt ein Timestamp/DateTime-Element hinzu. |
|
appendDate(aKey:C, aValue:N) |
Fügt ein Datumswert im Format “YYYY-MM-DD“ hinzu. |
|
appendNull(aKey:C) |
Fügt ein Null-Element hinzu. |
|
appendObject(aKey:C):O |
Fügt ein Objekt-Element (*TbeCbAnything*) hinzu und gibt dieses zurück. |
|
appendArray(aKey:C):O |
Fügt ein Array-Element (*TbeCbAnythingArray*) hinzu und gibt dieses zurück. |
|
setString(aPath:U, aValue:C) |
Verändert den Wert eines String-Elements. Falls das Element nicht vom Typ String ist oder es nicht existiert gibt es einen Fehler. |
|
setInteger(aPath:U, aValue:N) |
Verändert den Wert eines Integer-Elements. Falls das Element nicht vom Typ Integer ist oder es nicht existiert gibt es einen Fehler. |
|
setExtended(aPath:U, aValue:N) |
Verändert den Wert eines Extended-Elements. Falls das Element nicht vom Typ Extended ist oder es nicht existiert gibt es einen Fehler. |
|
setBoolean(aPath:U, aValue:L) |
Verändert den Wert eines Boolean-Elements. Falls das Element nicht vom Typ Boolean ist oder es nicht existiert gibt es einen Fehler. |
|
setTimestamp(aPath:U, aValue:N) |
Verändert den Wert eines Timestamp-Elements. Falls das Element nicht vom Typ Timestamp ist oder es nicht existiert gibt es einen Fehler. |
|
setDate(aPath:U, aValue:N) |
Verändert den Wert eines String-Elements zu einem Datum im Format “YYYY-MM-DD“. Falls das Element nicht vom Typ String ist oder es nicht existiert gibt es einen Fehler. |
|
forcesetString(aPath:U, aValue:C) |
Verhält sich so wie *setString()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht String ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetInteger(aPath:U, aValue:N) |
Verhält sich so wie *setInteger()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht Integer ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetExtended(aPath:U, aValue:N) |
Verhält sich so wie *setExtended()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht Extended ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetBoolean(aPath:U, aValue:L) |
Verhält sich so wie *setBoolean()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht Boolean ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetTimestamp(aPath:U, aValue:N) |
Verhält sich so wie *setTimestamp()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht Timestamp ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetDate(aPath:U, aValue:N) |
Verhält sich so wie *setDate()* mit der Ausnahme, dass es keinen Fehler gibt wenn der Type nicht String ist. Hierbei erfolgt eine automatische Typ-Umwandlung. |
|
forcesetNull(aPath:U) |
Verändert den Typen eines Elements zu NULL. Falls das Element nicht existiert gibt es einen Fehler. |
|
forcesetObject(aPath:U) |
Verändert den Typen eines Elements zu Objekt (*TbeCbAnyhting*). Falls das Element nicht existiert gibt es einen Fehler. |
|
forcesetArray(aPath:U) |
Verändert den Typen eines Elements zu Array (*TbeCbAnyhtingArray*). Falls das Element nicht existiert gibt es einen Fehler. |
|
ToString():C |
Gibt das JSON-Objekt als String zurück. |
|
Count():N |
Gibt die Anzahl der Element zurück. |
|
KeyAt(aIndex:N):C |
Liefert den Key-Namen für das x-te Element. |
|
KeyExists(aKey:C):L |
True falls der Key-Name existiert. |
|
Clear() |
Entfernt alle Elemente. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
RootArray():O |
Liefert im Fall von IsRootArray = True, das Hauptelement als Array zurück. |
|
IsRootArray():L |
True wenn das Hauptelement ein Array ist. |
|
ToFormattedString():C |
Gibt das JSON-Objekt als formatierten String mit Zeilenumbrüchen und Einrückungen zurück. |
|
FromString(aJSONString:C) |
Liest das JSON-Objekt als String ein. |
|
Count():N |
Gibt die Anzahl der Element zurück. |
|
Clear() |
Entfernt alle Elemente. |
|
IsEmpty():L |
True, falls keine Elemente enthalten sind. |
|
IsDefault():L |
True, falls es sich um das Default Objekt handelt, siehe *getObjectDef()*. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
IsArray():L |
Immer False. Nur für *TbeCbAnythingArray* True. |
|
IsObject():L |
Immer True. |
|
ToString():C |
Gibt das JSON-Objekt als String zurück. |
|
Count():N |
Gibt die Anzahl der Element zurück. |
|
KeyAt(aIndex:N):C |
Liefert den Key-Namen für das x-te Element. |
|
KeyExists(aKey:C):L |
True falls der Key-Name existiert. |
|
Clear() |
Entfernt alle Elemente. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
RootArray():O |
Liefert im Fall von IsRootArray = True, das Hauptelement als Array zurück. |
|
IsRootArray():L |
True wenn das Hauptelement ein Array ist. |
|
ToFormattedString():C |
Gibt das JSON-Objekt als formatierten String mit Zeilenumbrüchen und Einrückungen zurück. |
|
FromString(aJSONString:C) |
Liest das JSON-Objekt als String ein. |
|
Count():N |
Gibt die Anzahl der Element zurück. |
|
Clear() |
Entfernt alle Elemente. |
|
IsEmpty():L |
True, falls keine Elemente enthalten sind. |
|
IsDefault():L |
True, falls es sich um das Default Objekt handelt, siehe *getObjectDef()*. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
IsArray():L |
Immer False. Nur für *TbeCbAnythingArray* True. |
|
IsObject():L |
Immer True. |
|
ToFormattedString():C |
Gibt das JSON-Objekt als formatierten String mit Zeilenumbrüchen und Einrückungen zurück. |
|
FromString(aJSONString:C) |
Liest das JSON-Objekt als String ein. |
|
Count():N |
Gibt die Anzahl der Element zurück. |
|
Clear() |
Entfernt alle Elemente. |
|
IsEmpty():L |
True, falls keine Elemente enthalten sind. |
|
IsDefault():L |
True, falls es sich um das Default Objekt handelt, siehe *getObjectDef()*. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
IsArray():L |
Immer False. Nur für *TbeCbAnythingArray* True. |
|
IsObject():L |
Immer True. |
|
ValueType():N |
Gibt den Typen eines Elements zurück. *jvtString* *jvtInteger* *jvtExtended* *jvtBoolean* *jvtNull* *jvtTimestamp* *jvtObject* *jvtArray* |
|
IsArray():L |
Immer False. Nur für *TbeCbAnythingArray* True. |
|
IsObject():L |
Immer True. |
Beispiel
// JSON Objekt erzeugen und per Code parsen und ausgeben
// Modifizeren des JSON-Objekts und Speicherung in Datei
// Laden des JSON-Objekts und Vergleich ob Speicherung erfolgreich war
// Sicheres auslesen von ggf. nicht vorhanden Elementen
|oJSON, cJSONFormatted|
function FillJSON(oJSON)
| oArr, oArr2, oArr3, oObj, oObj2, oObj3|
// Element 1
oArr := oJSON.appendArray('root'),
oObj := oArr.appendObject(),
oObj.appendInteger('id', 1),
oObj.appendString('type', 'donut'),
oObj.appendString('name', 'cake'),
oObj.appendExtended('ppu', 0.55),
oObj2 := oObj.appendObject('batters'),
oArr2 := oObj2.appendArray('batter'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1001),
oObj3.appendString('type', 'Regular'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1002),
oObj3.appendString('type', 'Chocolate'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1003),
oObj3.appendString('type', 'Blueberry'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1004),
oObj3.appendString('type', 'Devil''s Food'),
oArr2 := oObj.appendArray('topping'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5001),
oObj2.appendString('type', 'None'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5002),
oObj2.appendString('type', 'Glazed'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5005),
oObj2.appendString('type', 'Sugar'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5007),
oObj2.appendString('type', 'Powdered Sugar'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5006),
oObj2.appendString('type', 'Chocolate with Sprinkles'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5003),
oObj2.appendString('type', 'Chocolate'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5004),
oObj2.appendString('type', 'Maple'),
// Element 2
oObj := oArr.appendObject(),
oObj.appendInteger('id', 2),
oObj.appendString('type', 'donut'),
oObj.appendString('name', 'Raised'),
oObj.appendExtended('ppu', 0.55),
oObj2 := oObj.appendObject('batters'),
oArr2 := oObj2.appendArray('batter'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1001),
oObj3.appendString('type', 'Regular'),
oArr2 := oObj.appendArray('topping'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5001),
oObj2.appendString('type', 'None'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5002),
oObj2.appendString('type', 'Glazed'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5005),
oObj2.appendString('type', 'Sugar'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5003),
oObj2.appendString('type', 'Chocolate'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5004),
oObj2.appendString('type', 'Maple'),
// Element 3
oObj := oArr.appendObject(),
oObj.appendInteger('id', 3),
oObj.appendString('type', 'donut'),
oObj.appendString('name', 'Old Fashioned'),
oObj.appendExtended('ppu', 0.55),
oObj2 := oObj.appendObject('batters'),
oArr2 := oObj2.appendArray('batter'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1001),
oObj3.appendString('type', 'Regular'),
oObj3 := oArr2.appendObject(),
oObj3.appendInteger('id', 1002),
oObj3.appendString('type', 'Chocolate'),
oArr2 := oObj.appendArray('topping'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5001),
oObj2.appendString('type', 'None'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5002),
oObj2.appendString('type', 'Glazed'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5003),
oObj2.appendString('type', 'Chocolate'),
oObj2 := oArr2.appendObject(),
oObj2.appendInteger('id', 5004),
oObj2.appendString('type', 'Maple'),
end,
function ModifyJSON(oJSON)
|oObj|
writeln('Element gelöscht?', oJSON.DeletePath({'root', 1, 'batters'})),
writeln('Element existiert?', oJSON.PathExists({'root', 0, 'topping', 3, 'type'})),
oObj := oJSON.getObject({'root', 2, 'batters', 'batter', 0}),
oObj.forcesetInteger('type', 1),
writeln('Element in Integer umgewandelt. Neuer Wert =', oObj.getInteger('type')),
end,
function PrintJSON(oElement)
|i, oItemType, cKey|
for i := 0 to oElement.Count() - 1 do
if oElement.IsObject() then
cKey := oElement.KeyAt(i),
else
cKey := Str(i),
endif,
oItemType := oElement.ValueType(i),
case oItemType
of jvtObject:: PrintJSON(oElement.getObject(i)),
of jvtArray:: PrintJSON(oElement.getArray(i)),
of jvtString:: writeln(cKey, oElement.getString(i)),
of jvtInteger:: writeln(cKey, oElement.getInteger(i)),
of jvtExtended:: writeln(cKey, oElement.getExtended(i)),
of jvtTimestamp:: writeln(cKey, oElement.getTimestamp(i)),
of jvtBoolean:: writeln(cKey, oElement.getBoolean(i)),
of jvtNull:: writeln(cKey, 'NULL'),
endcase,
next,
end,
function TestDef(oJSON)
|cType, i|
i := 0,
while true do
cType := oJSON.getStringDef({'root', i, 'topping', 3, 'type'}, 'DUMMY'),
if cType = 'DUMMY' then
break,
endif,
writeln('Test type at level ' + str(i), cType),
i++,
next,
end,
oJSON := CreateObject('TbeCbAnything'),
startseq
FillJSON(oJSON),
PrintJSON(oJSON),
ModifyJSON(oJSON),
oJSON.SaveToFile('c:\temp\json.txt', true),
cJSONFormatted := oJSON.ToFormattedString(),
always
DestroyObject(oJSON),
stopseq,
oJSON := CreateObject('TbeCbAnything'),
startseq
oJSON.LoadFromFIle('c:\temp\json.txt'),
writeln('JSON Speicherung und Laden erfolgreich?', oJSON.ToFormattedString() == cJSONFormatted),
TestDef(oJSON),
always
DestroyObject(oJSON),
stopseq,