ich wollte mir "mal kurz" ein Tool zur Extraktion von Tankstellenpreisen aus einer JSON-Datei zusammenschreiben, aber dieses JSON Format macht mich echt fertig. Bis vor 1 Stunde habe ich noch nie was von JSON gehört, geschweige denn etwas damit gemacht.
Soweit ich das verstanden habe liegt mir hier eine JSON Datei vor, die in der äußeren "Schicht" aus einem Array mit 10 Einträgen besteht. Jeder Arrayeintrag entspricht einer Tankstelle und besteht selbst wieder aus diversen Untereinträgen. Viele dieser Untereinträge sind "flat", das heißt ich kann sie relativ einfach mit GetJSONMember() extrahieren - entsprechenden Code habe ich mir auf die Schnelle aus der PB-Hilfe zusammengestoppelt. Einige Untereinträge sind selbst aber wieder Arrays und genau da habe ich es bisher nicht geschafft dran zu kommen. Ich weiß nicht mit welchen JSON-Funktionen ich mich zu dem betreffenden Eintrag "durch hangeln" muss. Die Hilfe liefert leider keine Beispiele für Zugriff auf verschachtelte Arrays in einem JSON String.
Ich liefere hier mal nur den ersten Arrayeintrag aus der Datei, sonst wird es zu lang. Ein Eintrag reicht ja auch völlig aus.
Folgende Daten müsstet ihr als Textdatei "spritpreis-json-stripped.txt" speichern:
Code: Alles auswählen
{"id":41188,"name":"Diskont Tankstelle","location":{"address":"Neue Landstraße 74 (\"Hofer-Parkplatz\")","postalCode":"4655","city":"Vorchdorf","latitude":48.008358,"longitude":13.920214},"contact":{"telephone":"43800202055","mail":"office@fe-trading.at","website":"http://www.diskonttanken.at/"},"openingHours":[{"day":"MO","label":"Montag","order":1,"from":"00:00","to":"24:00"},{"day":"DI","label":"Dienstag","order":2,"from":"00:00","to":"24:00"},{"day":"MI","label":"Mittwoch","order":3,"from":"00:00","to":"24:00"},{"day":"DO","label":"Donnerstag","order":4,"from":"00:00","to":"24:00"},{"day":"FR","label":"Freitag","order":5,"from":"00:00","to":"24:00"},{"day":"SA","label":"Samstag","order":6,"from":"00:00","to":"24:00"},{"day":"SO","label":"Sonntag","order":7,"from":"00:00","to":"24:00"},{"day":"FE","label":"Feiertag","order":8,"from":"00:00","to":"24:00"}],"offerInformation":{"service":false,"selfService":true,"unattended":true},"paymentMethods":{"cash":false,"debitCard":true,"creditCard":true,"others":"DKV-Card"},"paymentArrangements":{"cooperative":false,"clubCard":false},"position":1,"open":true,"distance":12.111741463692725,"prices":[{"fuelType":"DIE","amount":1.146,"label":"Diesel"}]}
Code: Alles auswählen
If ReadFile(0, "D:\spritpreis-json-stripped.txt")
sJsonFile.s = ReadString(0)
CloseFile(0)
Else
Debug "ReadFile Error"
EndIf
If ParseJSON(0, sJSONFile)
For i = 0 To JSONArraySize(JSONValue(0)) - 1
Debug Str( GetJSONInteger(GetJSONMember(GetJSONElement(JSONValue(0), i), "id")) )
Debug GetJSONString(GetJSONMember(GetJSONElement(JSONValue(0), i), "name"))
Debug GetJSONString(GetJSONMember(GetJSONElement(GetJSONMember(GetJSONElement(JSONValue(0), 0), "address"), i), "location"))
;[{"id":41188,"name":"Diskont Tankstelle","location":{"address":"Neue Landstraße 74
Next i
FreeJSON(0)
Else
Debug "JSON Parse Error"
EndIf
Wenn mich hierzu jemand in die richtige Richtung schubsen könnte, wär das super. Vermutlich habe ich einfach nur das Konzept JSON noch nicht ganz verstanden. Es soll ja lt. Beschreibung ein "ganz einfaches" Datenaustauschformat sein, was sehr leicht von Mensch und Maschine zu lesen ist.[23:30:04] [Debug] 41188
[23:30:04] [Debug] Diskont Tankstelle
[23:30:04] [ERROR] Zeile: 13
[23:30:04] [ERROR] Ungültiger JSON Wert. (0)
Gruß Kurzer
Edit: JSON-Datei nach Hinweis von Bisonte korrigiert.