Seite 1 von 1

Gibt's zu JSON ein simples Tutorial?

Verfasst: 08.11.2020 22:10
von Delle
Hallo,

gibt's ein einfaches Tutorial wie man JSON-Dateien "verarbeitet"?

Beispiel:

Bild

Ich würde mit LoadJSON() und IsJSON beginnen, danach würde ich z.B. bei "User" das "create_date" auslesen wollen.

Bei "Usage" gerne z.B. die Werte alle addieren, ggfs. aber auch nach Monaten auswerten wollen.

Mir geht's also weniger um die spätere Auswertung der Daten, sondern eher wie ich sie a) einlese und b) mittels Mappen/Lists verarbeite.

Danke! :allright:

Re: Gibt's zu JSON ein simples Tutorial?

Verfasst: 09.11.2020 22:22
von ccode_new
Hallöle,

ich kenne mich mit JSON-Dateien auch nicht aus und habe dieses Tutorial gefunden.

https://www.json.org/json-de.html

Deinen unteren JSON-Datei-Ausschnitt könnte man so einlesen.
;test.json -Datei

; {"User":{"active_time":"2020-11-07T13:58:18.147Z","city":{"name":"Nürnberg", "region":"Deutschland","coords":{"lat":49.5,"lon":11.1}},"create_date":"2019-07-05T20:09:08.477Z"},
; "Usage":{"app_opens":{"2019-07-05":3,"2019-07-06":12,"2019-07-07":47,"2020-11-03":4,"2020-11-04":6,"2020-11-05":5,"2020-11-06":7,"2020-11-07":7}}}

Code: Alles auswählen

Global NewMap app_opens()

test = LoadJSON(#PB_Any, "test.json")
If IsJSON(test)
  Debug "Alles ok!"  
  ObjectValue = JSONValue(test)
  
  If ExamineJSONMembers(ObjectValue)
    While NextJSONMember(ObjectValue)
      Select JSONType(JSONMemberValue(ObjectValue))
        Case #PB_JSON_Object
          Select JSONMemberKey(ObjectValue)
            Case "User"
              If ExamineJSONMembers(JSONMemberValue(ObjectValue))
                While NextJSONMember(JSONMemberValue(ObjectValue))
                  ;Debug JSONMemberKey(JSONMemberValue(ObjectValue))
                  ;Debug JSONType(JSONMemberValue(ObjectValue))
                  If JSONMemberKey(JSONMemberValue(ObjectValue)) = "create_date"
                    If JSONType(JSONMemberValue(JSONMemberValue(ObjectValue))) = #PB_JSON_String
                      Debug GetJSONString(JSONMemberValue(JSONMemberValue(ObjectValue)))
                    EndIf
                  EndIf
                Wend
              EndIf
            Case "Usage"
              If ExamineJSONMembers(JSONMemberValue(ObjectValue))
                While NextJSONMember(JSONMemberValue(ObjectValue))
                  ;Debug JSONType(JSONMemberValue(JSONMemberValue(ObjectValue)))
                  If JSONMemberKey(JSONMemberValue(ObjectValue)) = "app_opens"
                    If JSONType(JSONMemberValue(JSONMemberValue(ObjectValue))) = #PB_JSON_Object
                      ExtractJSONMap(JSONMemberValue(JSONMemberValue(ObjectValue)), app_opens())
                    EndIf
                  EndIf
                Wend
              EndIf
          EndSelect
      EndSelect
    Wend
  EndIf
EndIf

Define Plus.l = 0

ForEach app_opens()
  ;Debug app_opens()
  Plus + app_opens()
Next

Debug Plus
Das sieht zum kotzen aus und geht bestimmt auch eleganter.

Ich habe vorher noch nie JSON-Dateien ausgelesen/benutzt.

Schöner wäre es wenn die JSON-Datei nicht so viele Objekte enthalten würde.

Ein Objekt ist:
Objekte: Ein Objekt ist eine ungeordnete Menge von Name/Wert Paaren. Ein Objekt beginnt mit {geschwungene Klammer auf und endet mit }geschwungene Klammer zu. Jedem Namen folgt ein :Doppelpunkt gefolgt vom Wert und die einzelnen Name/Wert Paare werden durch ,Komma voneinander getrennt.
Das würde ein Auslesen in eine PB-Struktur erleichtern.
Dafür gibt es dann anscheinend diesen Befehl:
ExtractJSONStructure()