Parsen von verschachtelten Strukturen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Parsen von verschachtelten Strukturen

Beitrag von stab »

Hallo,

wie bekomme ich eigentlich die verschachtelte Struktur in meine Liste? (wenn ihr wisst, was ich meine :) )

Code: Alles auswählen

;    HTTP_Get liefert mir als Bsp. das:     [{"fam_name":"Müller","ort":"Köln","kinder":[{"name":"Daniel","alter":5},{"name":"Pia","alter":8}],{"fam_name":"Schulz","ort":"Bonn","kinder":{"name":"Lena","alter":2}],{"fam_name":"Schneider","ort":"Düsseldorf","kinder":[{"name":"Josef","alter":7},{"name":"Maria","alter":8},{"name":"Eva","alter":12}]]

HTTP_Get$ = ~"[{\"fam_name\":\"Müller\",\"ort\":\"Köln\", \"kinder\": [{\"name\":\"Daniel\",\"alter\":5},{\"name\":\"Pia\",\"alter\":8}]},"    +
            ~" {\"fam_name\":\"Schulz\",\"ort\":\"Bonn\" ,\"kinder\": [{\"name\":\"Lena\",\"alter\":2}]},"                                     +
            ~" {\"fam_name\":\"Schneider\",\"ort\":\"Düsseldorf\",\"kinder\": [{\"name\":\"Josef\",\"alter\":7},{\"name\":\"Maria\",\"alter\":8},{\"name\":\"Eva\",\"alter\":12}]}"    +
             "]"

         
Debug HTTP_Get$

Structure kind
  name.s
  alter.i
EndStructure

Structure familie
  fam_name.s
  ort.s
  kinder.kind
EndStructure


NewList kindergeburtstag.familie()

If ParseJSON(0, HTTP_Get$)
  Debug "Parse OK"
	Debug ComposeJSON(0, #PB_JSON_PrettyPrint)
  ExtractJSONList(JSONValue(0), kindergeburtstag())
EndIf
Debug ""


ForEach kindergeburtstag()
  Debug kindergeburtstag()\fam_name
  Debug kindergeburtstag()\ort
  Debug kindergeburtstag()\kinder         ;adresse
  Debug kindergeburtstag()\kinder\name
  Debug kindergeburtstag()\kinder\alter
Next
Muss ich eine 2. Liste erstellen und mit Speicheradressen arbeiten?
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Parsen von verschachtelten Strukturen

Beitrag von Kiffi »

Du benötigst Du eine List kinder:

Code: Alles auswählen

Structure familie
  fam_name.s
  ort.s
  List kinder.kind() ; <- hier
EndStructure
und dann kannst Du es so auslesen:

Code: Alles auswählen

ForEach kindergeburtstag()
  Debug kindergeburtstag()\fam_name
  Debug kindergeburtstag()\ort
  ForEach kindergeburtstag()\kinder()
    Debug kindergeburtstag()\kinder()\name
    Debug kindergeburtstag()\kinder()\alter
  Next
Next
a²+b²=mc²
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: Parsen von verschachtelten Strukturen

Beitrag von stab »

Hallo Kiffi, perfekt, super. 1000 Dank.

Code: Alles auswählen

;    HTTP_Get liefert mir als Bsp. das:     [{"fam_name":"Müller","ort":"Köln","kinder":[{"name":"Daniel","alter":5},{"name":"Pia","alter":8}],{"fam_name":"Schulz","ort":"Bonn","kinder":{"name":"Lena","alter":2}],{"fam_name":"Schneider","ort":"Düsseldorf","kinder":[{"name":"Josef","alter":7},{"name":"Maria","alter":8},{"name":"Eva","alter":12}]]

HTTP_Get$ = ~"[{\"fam_name\":\"Müller\",\"ort\":\"Köln\", \"kinder\": [{\"name\":\"Daniel\",\"alter\":5},{\"name\":\"Pia\",\"alter\":8}]},"    +
            ~" {\"fam_name\":\"Schulz\",\"ort\":\"Bonn\" ,\"kinder\": [{\"name\":\"Lena\",\"alter\":2}]},"                                     +
            ~" {\"fam_name\":\"Schneider\",\"ort\":\"Düsseldorf\",\"kinder\": [{\"name\":\"Josef\",\"alter\":7},{\"name\":\"Maria\",\"alter\":8},{\"name\":\"Eva\",\"alter\":12}]}"    +
             "]"

         
Debug HTTP_Get$

Structure kind
  name.s
  alter.i
EndStructure

Structure familie
  fam_name.s
  ort.s
  List kinder.kind()
EndStructure


NewList kindergeburtstag.familie()

If ParseJSON(0, HTTP_Get$)
  Debug "Parse OK"
	Debug ComposeJSON(0, #PB_JSON_PrettyPrint)
	ExtractJSONList(JSONValue(0), kindergeburtstag())
	ExtractJSONStructure(JSONValue(0), @p.kind, kind)
EndIf

Debug ""

ForEach kindergeburtstag()
  Debug kindergeburtstag()\fam_name +" aus " + kindergeburtstag()\ort
  If ListSize(kindergeburtstag()\kinder())
    Debug "Kinder: "
    ForEach kindergeburtstag()\kinder()
      Debug kindergeburtstag()\kinder()\name + ", Alter: " + kindergeburtstag()\kinder()\alter + " Jahre"
    Next
  EndIf 
  
  Debug "-------------------"  
Next

Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten