Inhaltsverzeichnis

24.6.9.0 JSON und JSONCollection

Auf der Website http://de.wikipedia.org/wiki/JavaScript_Object_Notation wird das Daten-Format JSON so beschrieben: Die JavaScript Object Notation, kurz JSON [ˈdʒeɪsən], ist ein kompaktes Datenformat in einer einfach lesbaren Textform zum Zweck des Datenaustauschs zwischen Anwendungen. Jedes gültige JSON-Dokument soll ein gültiges JavaScript sein und per eval() interpretiert werden können. […] Davon abgesehen ist JSON aber unabhängig von der Programmiersprache.

Die Klasse JSON (gb.web → gb.util.web) erlaubt Ihnen das Kodieren und Dekodieren im JSON-Format.

24.6.9.0.1 Zuordnung JSON-Element und Gambas-Datentyp

Die folgende Tabelle beschreibt die Zuordnung zwischen JSON-Elementen und Gambas-Datentypen:

JSON-SyntaxJSON-ElementGambas-Datentyp
{ „string“: value , … } ObjektCollection
[ value, … ]ArrayVariant[ ]
„abc“ ZeichenketteUTF-8-String
-123.45E+6ZahlInteger, Long oder Float
true oder falseWahrheitswert (Boolean)Boolean
nullNullNULL oder JSON.Null

Tabelle 24.6.9.0.1 : Zuordnungstabelle

Beachten Sie, dass Sie nach der JSON-Syntax die Werte true, false und null im JSON-Text klein schreiben müssen.

24.6.9.0.2 Klasse JSON

Die Klasse JSON besitzt nur eine Eigenschaft und zwei Methoden:

24.6.9.0.3 Klasse JSONCollection

Die Klasse JSONCollection (gb.web → gb.util.web) repräsentiert ein JSON-Objekt.

Die Klasse JSONCollection verfügt über zwei Eigenschaften:

EigenschaftDatentypBeschreibung
CountIntegerGibt die Anzahl der Elemente zurück, die in der JSON-Collection gespeichert sind.
LengthIntegerSynonym für die Eigenschaft Count.
KeyStringGibt den Schlüssel (Key) des zuletzt gelesenen oder aufgezählten Elements in einer JSON-Collection zurück.

Tabelle 24.6.9.0.2 : Eigenschaften der Klasse JSONCollection

Die Klasse JSONCollection besitzt die folgenden fünf Methoden:

MethodeBeschreibung
Add ( Value As Variant, Key As String )Fügt ein Element als Wert-Schlüssel-Paar in eine JSON-Collection ein.
Clear ( )Löscht den Inhalt einer JSON-Collection.
Copy ( )Gibt eine 1:1-Kopie einer JSON-Collection als eigenständiges Objekt zurück.
Exist ( Key As String ) As BooleanGibt True zurück, wenn zu dem als Parameter 'Key' übergebenen Schlüssel ein Wert in einer JSON-Collection existiert.
Remove ( Key As String )Löscht das Element mit dem als Parameter 'Key' übergebenen Schlüssel in einer JSON-Collection.

Tabelle 24.6.9.0.3 : Methoden der Klasse JSONCollection

24.6.9.0.4 Beispiel

In diesem Beispiel werden Daten mit Hilfe der Methode JSON.Decode(….) in das JSON-Format konvertiert:

[1]   Dim fRatio As Float, sJSONText As String, vArray As Variant[]
[2]   Dim cCollection As Collection, cJSONCollection As JSONCollection 
[3]   
[4]   cJSONCollection = New JSONCollection 
[5]   cCollection = New Collection 
[6] 
[7]   fRatio = 0.1 
[8]   cJSONCollection["Seite \"a\" "] = 688.7 * fRatio 
[9]   cCollection[String.Chr(946)] = 43 
[10]   cCollection[String.Chr(947)] = 2.039E1 
[11]   cJSONCollection["Winkel"] = cCollection ' Alternative: cData.Add(cCollection, "Winkel") 
[12]   cJSONCollection["Umfang Dreieck " & String.Chr(916) & " ABC"] = "?" 
[13]   cJSONCollection["Widerstand in " & String.Chr(937)] = 2550 
[14]   vArray = New Variant[] 
[15]   vArray = ["gambas-buch.de", "gambas.sourceforge" & ".net"] 
[16]   cJSONCollection["URLs"] = vArray 
[17]   cJSONCollection["EMail"] = "wer@ist.da" 
[18]   cJSONCollection["Datum"] = Format(Now(), "dd. mmmm yyyy") 
[19]   cJSONCollection["Diplom"] = False 
[20]   cJSONCollection["Master"] = JSON.Null 
[21]   
[22]   sJSONText = JSON.Encode(cJSONCollection) 
[23] 
[24]   Print sJSONText

Kommentar:

So präsentiert sich der JSON-Text in der Konsole der Gambas-IDE:

{"Seite \"a\" ": 68.87, "Winkel": {"β": 43, "γ": 20.39}, "Umfang Dreieck Δ ABC": "?", 
"Widerstand in Ω": 2550, "URLs": ["gambas-buch.de", "gambas.sourceforge.net"], 
"EMail": "wer@ist.da", "Datum": "17. April 2016", "Diplom": false, "Master": null}

Gibt man den JSON-Text formatiert aus → Kapitel 24.6.9.1 Projekt Formatierer für JSON-Text, dann ist er besser lesbar:

{ 
  "Seite "a" ": 68,87, 
  "Winkel": { 
    "β": 43, 
    "γ": 20,39 
  }, 
  "Umfang Dreieck Δ ABC": "?", 
  "Widerstand in Ω": 2550, 
  "URLs": [ 
    "gambas-buch.de", 
    "gambas.sourceforge.net" 
  ], 
  "EMail": "wer@ist.da", 
  "Datum": "17. April 2016", 
  "Diplom": false, 
  "Master": null 
}

Analysiert man den Wert-Datentyp der Elemente in der JSON-Collection, dann zeigt sich die folgende Übersicht:

Anzahl der Elemente in der JSON-Collection: 9 
---------------------------------------------------------------------------------------------------- 
Schlüssel 1 : "Seite "a" " ---> Wert-Typ: Float 
Schlüssel 2 : "Winkel" ---> Wert-Typ: JSONCollection 
Schlüssel 3 : "Umfang Dreieck Δ ABC" ---> Wert-Typ: String 
Schlüssel 4 : "Widerstand in Ω" ---> Wert-Typ: Integer 
Schlüssel 5 : "URL" ---> Wert-Typ: Variant[] 
Schlüssel 6 : "EMail" ---> Wert-Typ: String 
Schlüssel 7 : "Datum" ---> Wert-Typ: String 
Schlüssel 8 : "Diplom" ---> Wert-Typ: Boolean 
Schlüssel 9 : "Master" ---> Wert-Typ: NULL oder JSON-Null

Hinweis: In der Revision 7744 von Gambas3 ist ein Fehler in der Klasse JSONCollection korrigiert worden, der die Eigenschaft JSON.Null nicht korrekt übernahm.

Download