Codeblock Onlinehilfe

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.

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,

Weitere Verknüpfungen