Hallo,
gibt's ein einfaches Tutorial wie man JSON-Dateien "verarbeitet"?
Beispiel:
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!
Gibt's zu JSON ein simples Tutorial?
Gibt's zu JSON ein simples Tutorial?
PB 6.02 LTS + Win 11
Re: Gibt's zu JSON ein simples Tutorial?
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}}}
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:
Dafür gibt es dann anscheinend diesen Befehl:
ExtractJSONStructure()
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
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:
Das würde ein Auslesen in eine PB-Struktur erleichtern.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.
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
no Keyboard, press any key
no mouse, you need a cat