JSON ohne Struktur parsen

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

JSON ohne Struktur parsen

Beitrag von Delle »

Hallo,

ich habe eine JSON-Datei, welche nicht - wie übliche - eine Struktur besitzt, sondern einfach nur Werte nacheinander:

Code: Alles auswählen

{
"C:\\Users\\PC\\Documents\\Vendor\\Irgendwas 1.txt":1,
"C:\\Users\\PC\\Documents\\Vendor\\Irgendwas 2.txt":1,
"C:\\Users\\PC\\Documents\\Vendor\\Irgendwas 3.txt":1,
"C:\\Users\\PC\\Documents\\Vendor\\Irgendwas 4.txt":1,
"C:\\Users\\PC\\Documents\\Vendor\\Irgendwas 5.txt":1,
usw.
}
Wie liest man den sowas zeilenweise ein zur weiteren Verarbeitung?

Theoretisch könnte man auch einfach die Strings splitten ohne jegliches JSON, aber es sollte schon mittels JSON verarbeitet werden...

Danke für alle Tipps! ;)
PB 6.21 | Win 11
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Re: JSON ohne Struktur parsen

Beitrag von Macros »

Hallo Delle,

das geht ganz einfach mit ExtractJSONMap von der JSON Lib:

Code: Alles auswählen

NewMap Pfad.i()

LoadJSON(1,"/home/macros/ram/sample.json") ; Natürlich anpassen
ExtractJSONMap(JSONValue(1),Pfad())
FreeJSON(1)

ForEach Pfad()
  Debug MapKey(Pfad())
Next
Du kannst die Keys dann auch ein eine Liste überführen und die sortieren. Falls es dir auf die Reihenfolge ankommt, sieh dir ExamineJSONMembers() und das Beispiel in der Hilfe an.
Bild
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Re: JSON ohne Struktur parsen

Beitrag von Delle »

Danke, das sieht natürlich viel eleganter aus, als meine zwischenzeitliche "Lösung":

(glaube auch, dass dieses "; display only members with values of numerical types" vollkommen unnötig ist)

Code: Alles auswählen

If LoadJSON(#json, File$)
  
 
   ; get the json object value
  jsonObjectValue = JSONValue(#json)
  
  ; retrieve the members of the json object
  If ExamineJSONMembers(jsonObjectValue)
    
    ;Debug "displaying JSON object members with numerical values only:"
    
    ; iterate through the members of the json object
    While NextJSONMember(jsonObjectValue)
      
      
      
      ; display only members with values of numerical types
      If JSONType(JSONMemberValue(jsonObjectValue)) = #PB_JSON_Number

        Debug "> " + JSONMemberKey(jsonObjectValue) + " = " + Str(GetJSONDouble(JSONMemberValue(jsonObjectValue)))
        
          
      

      EndIf
      
    Wend
    
    
  
    
  EndIf
  
  
  FreeJSON(#json)
  
EndIf
PB 6.21 | Win 11
Antworten