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()