ExtractJSON xxxx

Für allgemeine Fragen zur Programmierung mit PureBasic.
Sooraa
Beiträge: 15
Registriert: 07.05.2014 19:50

ExtractJSON xxxx

Beitrag von Sooraa »

Guten Tag in die Runde,
die JSON Funktionalität in PB ist eine große Hilfe. Es scheint, daß aber hier in Bezug auf die Übernahme von JSON values aus "nested objects" in eigene memory-Strukturen ein "Wissens-Loch" besteht:

Es sollen fertige JSON Daten übernommen werden. Die "normalen" JSON-Funktionen sind beherrscht. Bei nested objects landet jedoch nichts in der Strukturen. Es wird an der Konstruktion der Struktur passend zum vorgegeben JSON gehen: Beispiel:
Code:

Code: Alles auswählen

; kommt normalerweise aus einer Datei, hier als String
Structure Men
  id$
  gender$
  hair$
EndStructure
Define P.Men

Jin$ = "{"+Chr(34)+"id"+Chr(34)+":{"+Chr(34)+"gender"+Chr(34)+": "+Chr(34)+"male"+Chr(34)+", "+Chr(34)+"hair"+Chr(34)+": "+Chr(34)+"blonde"+Chr(34)+"}}"
JS1 = ParseJSON(#PB_Any, Jin$)
If JS1
  ExtractJSONStructure(JSONValue(JS1), @P.Men, Men)
  PrintN(P\id$)
  PrintN(P\gender$)
  PrintN(P\hair$)
EndIf
End
Die Struktur bleibt leer. What's the proper structure?

__________________________________________________
Code-Tags hinzugefügt und Code eingerückt
26.02.2015
RSBasic
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ExtractJSON xxxx

Beitrag von Kiffi »

Code: Alles auswählen

EnableExplicit

Structure sCharacteristics
  gender$
  hair$
EndStructure

Structure Men
  id.sCharacteristics
EndStructure

Define P.Men
Define Jin$
Define JS1

Jin$ = "{"+Chr(34)+"id"+Chr(34)+":{"+Chr(34)+"gender"+Chr(34)+": "+Chr(34)+"male"+Chr(34)+", "+Chr(34)+"hair"+Chr(34)+": "+Chr(34)+"blonde"+Chr(34)+"}}"

JS1 = ParseJSON(#PB_Any, Jin$)

If JS1
  ExtractJSONStructure(JSONValue(JS1), @P.Men, Men)
  Debug(P\id\gender$)
  Debug(P\id\hair$)
EndIf
Grüße ... Peter
a²+b²=mc²
Sooraa
Beiträge: 15
Registriert: 07.05.2014 19:50

Re: ExtractJSON xxxx

Beitrag von Sooraa »

Toll die schnelle Antwort mit Lösung.

Die echten JSONs sind strukturell sehr tief, sehr breit und sehr voluminös. Damit fängt die Arbeit hier erst jetzt an: PB ist meistens sehr durchsatzeffizient und es wird spannend, wie schnell das nun im Umgang mit den JSON functions wird.

Im Kern fasse ich das nun zu 2/3 gefüllte Wissensloch einmal so zusammen: JSON "object in object" wird in PB "structure in structure", oder ?

In any way, thanks a lot!
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ExtractJSON xxxx

Beitrag von Kiffi »

Sooraa hat geschrieben:JSON "object in object" wird in PB "structure in structure", oder ?
Korrekt.

Grüße ... Peter
a²+b²=mc²
Sooraa
Beiträge: 15
Registriert: 07.05.2014 19:50

Re: ExtractJSON xxxx

Beitrag von Sooraa »

Hi Peter, ich hoffe, daß damit 3/4 des Lochs gefüllt sind.

Was noch offen ist, ist vielleicht Handwerk: Bindestrich names, Bool Status, multi level structure in structure.
input-data:

Code: Alles auswählen

{
    "Container": {
        "Compressed": true,
        "Gzip-Metadata": {
            "Footer-Length": "8",
            "Inflated-CRC": "-1874734280"
        },
        "Offset": "602772450",
        "Filename": "samplefile.gz"
    }
}
Kann da noch etwas am letzten Viertel geholfen werden? Danke und
Gruß, Ralf

__________________________________________________
Code-Tags hinzugefügt
27.02.2015
RSBasic
Sooraa
Beiträge: 15
Registriert: 07.05.2014 19:50

Re: ExtractJSON xxxx

Beitrag von Sooraa »

@Kiffi,

kann man die Stille so deuten, daß mein letztes Beispiel-JSON nicht mit native PB umzuwandeln ist?
(Bindestriche in names, JSON bool, multilevel structure)

Danke für ein kurzes feedback, Ralf
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ExtractJSON xxxx

Beitrag von Kiffi »

die Stille kannst Du so deuten: "Der Peter hat leider keine Ahnung, ob und wie das mit den Bindestrichen umzusetzen ist". ;-)

Gegebenenfalls könnte man den JSON-String mittels String- oder RegEx-Operationen 'vorbehandeln' (Bindestriche und ähnlich problematisches entfernen), damit ExtractJSONStructure() funktioniert.

'Multilevel' dürfte mit geschickt geschachtelten Structures zu lösen sein.

Grüße ... Peter

P.S.: Könnte das hier unter Umständen eine Alternative für Dich sein? http://www.purebasic.fr/german/viewtopi ... 29#p311429
a²+b²=mc²
Sooraa
Beiträge: 15
Registriert: 07.05.2014 19:50

Re: ExtractJSON xxxx

Beitrag von Sooraa »

Thanks, leider nicht so richtig, denn der Gag wäre ja die native JSON-Funktionalität in PB als performante Dauerlösung. Vielleicht wird JSON in PB ja noch komplettiert, wie z.B. Toleranz von dashes im key-value etc.

Die dashes können ja noch eliminiert werden. Aber die Übernahme von bools und die structure in structure ist als Thema nicht beherrscht.
Vielleicht gibt es ja noch eine wenig Hilfe.

Gruß, Ralf
Antworten