Gibt's zu JSON ein simples Tutorial?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1118
Registriert: 10.05.2005 22:48

Gibt's zu JSON ein simples Tutorial?

Beitrag 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:
PB 6.02 LTS + Win 11
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Gibt's zu JSON ein simples Tutorial?

Beitrag 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()
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten