Android Tutorial Android JSON Tutorial

klaus

Expert
Licensed User
Longtime User
JSON ist ein ähnliches Format wie XML, aber normalerweise kürzer und einfacher zu zergliedern.
Etliche Webservices arbeiten jetzt mit JSON.

JSON offizieller Website: JSON

Das Englische Originaltutorial.

Mit der neuen JSON Library, kann man leicht JSON Strings zergliedern und erstellen.

Als Beispiel werden wir folgenden JSON String analysieren:

B4X:
{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}
Dieses Beispiel kommt von json.org/examples.
Geschweifte Klammern entsprechen einem Objekt und eckige Klammern entsprechen einem Array.
Objekte enthalten Schlüsselwort/Wert Paare und Arrays enthalten Listen von Elementen. Kommas trennen die Elemente.

In diesem Beispiel, ist der Wert der obersten Ebene ein Objekt. Dieses Objekt enthält ein einziges Objekt mit dem Schlüsselwort "menu".
"value" in dem "menu" Objekt ist ein anderes Objekt des mehrere Werte enthält.
Wir holen das "menuitem" Element, das ein Array von Elementen enthält und zeigen die Werte des "value" Elements in LogCat an.

In der Analyse des Strings werden JSON Objekte in Maps umgewandelt und Arrays werden in Listen umgewandelt.
Wir lesen den String von einer Datei die wir mit dem Files Manager (Files tab) zugefügt hatten.

B4X:
    Dim JSON As JSONParser
    Dim Map1 As Map
    JSON.Initialize(File.ReadString(File.DirAssets, "example.json"))
    Map1 = JSON.NextObject
    Dim m As Map 'helper map for navigating
    Dim MenuItems As List
    m = Map1.Get("menu")
    m = m.Get("popup")
    MenuItems = m.Get("menuitem")
    For i = 0 To MenuItems.Size - 1
        m = MenuItems.Get(i)
        Log(m.Get("value"))
    Next
JSON.NextObject zergliedert den String und gibt eine Map mit den zergliederten Daten zurück. Diese Methode darf nur aufgerufen werden wenn der Wert der obersten Ebene ein Objekt ist (was üblicherweise der Fall ist).
Jetzt arbeiten wir mit Map1 um die Werte zu erhalten.
Wir deklarieren eine weitere Map mit dem Name 'm'.

B4X:
m = Map1.Get("menu")
Dem Objekt "menu" ist die Map 'm' zugewiesen.

B4X:
m = m.Get("popup")
Jetzt wird die Map m dem Objekt "popup" zugewiesen.

B4X:
MenuItems = m.Get("menuitem")
Das Array "menuitem" ist der MenuItems Liste zugewiesen.
Wir werden die Elemente durchlaufen (Maps in unserem Fall) und die Werte mit dem Schlüsselwort "value" in LogCat anzeigen.
B4X:
    For i = 0 To MenuItems.Size - 1
        m = MenuItems.Get(i)
        Log(m.Get("value"))
    Next
Die Anzeige in LogCat ist:
New
Open
Close

Ein JSON Strings wird ähnlich erstellt. Wir erstellen eine Map oder eine Liste die die Werte enthält und dann konvertieren wir sie mit JSONGenerator in den JSON String:

B4X:
    Dim Data As List
    Data.Initialize
    Data.Add(1)
    Data.Add(2)
    Data.Add(3)
    Data.Add(Map1) 'add the previous map loaded from the file.
    Dim JSONGenerator As JSONGenerator
    JSONGenerator.Initialize2(Data)
    Msgbox(JSONGenerator.ToPrettyString(2), "")
JSONGenerator kann mit einer Map oder Liste initialisiert werden.
Die Umwandlung der Daten in einen JSON String wird durch den Aufruf von ToString oder ToPrettyString durchgeführt.
ToPrettyString fügt Einzüge hinzu was leichter zu lesen und zu debuggen ist.

json_1.png
 
Last edited by a moderator:
Top