TbeCbAnything
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.
Methoden | Beschreibung | |
---|---|---|
FromString | Liest das JSON-Objekt als String ein. | |
Parameter | Beschreibung | |
cJsonString:C | JSON-Objekt als String | |
FromYaml | Liest das JSON-Objekt von einem String im YAML-Format ein. (ab Version 7.6.1.7) | |
Parameter | Beschreibung | |
cYamlString:C | String im YAML-Format | |
ToString:C | Gibt das JSON-Objekt als String zurück. | |
ToFormattedString:C | Gibt das JSON-Objekt als formatierten String mit Zeilenumbrüchen und Einrückungen zurück. | |
ToYaml:C | Gibt das JSON-Objekt als String im YAML-Format zurück (ab Version 7.6.1.7) | |
LoadFromFile | Liest das JSON-Objekt aus einer Datei ein. | |
Parameter | Beschreibung | |
cFileName:C | Pfad der Datei | |
LoadFromYamlFile | Liest das JSON-Objekt im YAML-Format aus einer Datei ein. (ab Version 7.6.1.7) | |
Parameter | Beschreibung | |
cFileName:C | Pfad der Datei | |
SaveToFile | Speichert das JSON-Objekt in eine Datei. | |
Parameter | Beschreibung | |
cFileName:C | Pfad der Datei | |
SaveToYamlFile | Speichert das JSON-Objekt im YAML-Format in eine Datei. (ab Version 7.6.1.7) | |
Parameter | Beschreibung | |
cFileName:C | Pfad der Datei | |
IsRootArray:L | True wenn das Hauptelement ein Array ist. | |
RootArray:O | Liefert im Fall von IsRootArray = True, das Hauptelement als Array zurück. | |
KeyAt:C | Liefert den Key-Namen für das x-te Element. | |
Parameter | Beschreibung | |
nIndex:N | Index des Elements | |
KeyExists:L | True falls der Key-Name existiert. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
PathExists:L | True falls der Pfad existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
DeletePath:L | Löscht ein Element.Rückgabe True, falls Löschung erfolgreich war. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
RenameKeyPath:L | Benennt ein Element um.Rückgabe True, falls Umbenennung erfolgreich war. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
cNewKey:C | Neuer Schlüssel-Name | |
ValueType:N | Gibt den Typen eines Elements zurück. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
IsEmpty:L | True, falls keine Elemente enthalten sind. | |
IsDefault:L | True, falls es sich um das Default Objekt handelt, siehe getObjectDef(). | |
IsObject:L | Immer True. | |
IsArray:L | Immer False. Nur für TbeCbAnythingArray True. | |
Count:N | Gibt die Anzahl der Element zurück. | |
Clear | Entfernt alle Elemente. | |
getString:C | Liefert für das Element den Wert als String. Fehler falls das Element nicht vom Typ String ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getStringDef:C | Verhält sich wie getString() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
cDefault:C | Default Wert falls das Element nicht existiert | |
getInteger:N | Liefert für das Element den Wert als Integer. Fehler falls das Element nicht vom Typ Integer ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getIntegerDef:N | Verhält sich wie getInteger() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
nDefault:N | Default Wert falls das Element nicht existiert | |
getExtended:N | Liefert für das Element den Wert als Extended. Fehler falls das Element nicht vom Typ Extended ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getExtendedDef:N | Verhält sich wie getExtended() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
nDefault:N | Default Wert falls das Element nicht existiert | |
getBoolean:L | Liefert für das Element den Wert als Boolean. Fehler falls das Element nicht vom Typ Boolean ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getBooleanDef:L | Verhält sich wie getBoolean() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
lDefault:L | Default Wert falls das Element nicht existiert | |
getTimestamp:D | Liefert für das Element den Wert als DateTime. Fehler falls das Element nicht vom Typ DateTime ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getTimestampDef:D | Verhält sich wie getTimestamp() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
dDefault:D | Default Wert falls das Element nicht existiert | |
getDate:D | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getDateDef:D | Verhält sich wie getDate() mit der Ausnahme, dass falls das Element nicht existiert, ein Default Wert anstelle eines Fehlers zurückgegeben wird. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getObject:O | Liefert das Element als Objekt (TbeCbAnything). Fehler falls das Element nicht vom Typ Objekt ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getObjectDef: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üpfungenIsDefault(). | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getArray:O | Liefert das Element als Array (TbeCbAnythingArray). Fehler falls das Element nicht vom Typ Array ist oder dieses nicht existiert. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
getArrayDef: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(). | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
appendObject:O | Fügt ein Objekt-Element (TbeCbAnything) hinzu und gibt dieses zurück. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
appendArray:O | Fügt ein Array-Element (TbeCbAnythingArray) hinzu und gibt dieses zurück. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
appendString | Fügt ein String-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
cValue:C | Wert des Elements | |
appendInteger | Fügt ein Integer-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
nValue:N | Wert des Elements | |
appendExtended | Fügt ein Extended-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
nValue:N | Wert des Elements | |
appendBoolean | Fügt ein Boolean-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
lValue:L | Wert des Elements | |
appendTimestamp | Fügt ein Timestamp/DateTime-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
dValue:D | Wert des Elements | |
appendDate | Fügt ein Datumswert im Format “YYYY-MM-DD“ hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
dValue:D | Wert des Elements | |
appendNull | Fügt ein Null-Element hinzu. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
setString | Verändert den Wert eines String-Elements. Falls das Element nicht vom Typ String ist oder es nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
cValue:C | Neuer Wert des Elements | |
setInteger | Verändert den Wert eines Integer-Elements. Falls das Element nicht vom Typ Integer ist oder es nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
nValue:N | Neuer Wert des Elements | |
setExtended | Verändert den Wert eines Extended-Elements. Falls das Element nicht vom Typ Extended ist oder es nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
nValue:N | Neuer Wert des Elements | |
setBoolean | Verändert den Wert eines Boolean-Elements. Falls das Element nicht vom Typ Boolean ist oder es nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
lValue:L | Neuer Wert des Elements | |
setTimestamp | Verändert den Wert eines Timestamp-Elements. Falls das Element nicht vom Typ Timestamp ist oder es nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
dValue:D | Neuer Wert des Elements | |
setDate | 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. | |
Parameter | Beschreibung | |
cKey:C | Schlüssel-Name des Elements | |
dValue:D | Neuer Wert des Elements | |
forcesetString | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
cValue:C | Neuer Wert des Elements | |
forcesetInteger | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
nValue:N | Neuer Wert des Elements | |
forcesetExtended | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
nValue:N | Neuer Wert des Elements | |
forcesetBoolean | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
lValue:L | Neuer Wert des Elements | |
forcesetTimestamp | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
dValue:D | Neuer Wert des Elements | |
forcesetDate | 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. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
dValue:D | Neuer Wert des Elements | |
forcesetNull | Verändert den Typen eines Elements zu NULL. Falls das Element nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
forcesetObject | Verändert den Typen eines Elements zu Objekt (TbeCbAnyhting). Falls das Element nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements | |
forcesetArray | Verändert den Typen eines Elements zu Array (TbeCbAnyhtingArray). Falls das Element nicht existiert gibt es einen Fehler. | |
Parameter | Beschreibung | |
aPath:A | Pfad des Elements |
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.
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,