Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   JSON parsen mit mehreren Eigenschaften pro Object (https://www.delphipraxis.net/157970-json-parsen-mit-mehreren-eigenschaften-pro-object.html)

Tony-S 31. Jan 2011 22:35

JSON parsen mit mehreren Eigenschaften pro Object
 
Hallo Delphi-Praxis,

ich nutze eine API um Bilder auf eine Webseite zu laden, diese API gibt mir einen JSON-String zurück, den ich nicht so richtig geparsed bekomme.
Sobald ein Objekt mehrere Eigenschaft hat kann ich diese nicht mehr Abfragen.

Im Netz findet man die Unit "uLkJSON" (sourceforge.net/projects/lkjson/), nach diesem Beispielprojekt (sample 3) hab ich einen Versuch gestartet:

Delphi-Quellcode:
uses

uLkJSON;

var
  JSON, s2: String;
  js,xs:TlkJSONobject;
  ws: TlkJSONstring;

JSON := '{"image":{"size":293229,"created_at":'+
        '"2011-01-29T15:47:43Z","api_client_id":4,"title":null,'+
        '"content_type":"image/png","updated_at":"2011-01-29T15:47:43Z",'+
        '"user_id":64,"height":256,"filename":"Test.PNG",'+
        '"public_view_url":"http://pickhost.eu/view/0004/2631/Test.PNG",'+
        '"description":null,"visibility":"private","public_url":'+
        '"http://pickhost.eu/images/0004/2631/Test.PNG","width":631}}';
        // Der JSON-String der API

        js := TlkJSON.ParseText(JSON) as TlkJSONobject;

        s2 := vartostr(js.Field['"public_url"'].Value);
        form1.Caption := s2;
Ich weiß nicht genau ob der Schlüssel public_url in Anführungszeichen gehört oder nicht, an der Speicher Exception ändert das aber auch nichts.

Die ist übrigens ein Cross-Post: http://www.delphi-forum.de/topic_JSO...ct_103859.html

Hoffentlich kann mir einer von euch erklären was ich falsch mache.

MfG Tony

Sir Rufo 1. Feb 2011 00:42

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Schon mal mit
Code:
image.public_url
probiert?

mjustin 1. Feb 2011 09:27

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Tipp: unter http://chris.photobooks.com/json/default.htm gibt es ein praktisches Online Werkzeug, das einen JSON String 'visualisiert'.

Wenn man in der Visualisierung auf ein Element der Datenstruktur klickt, wird links davon der Pfad zu diesem Element angezeigt, z.B. bei einem Array auch mit der passenden Indexdarstellung arrayname[v]

joachimd 1. Feb 2011 10:43

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Zitat:

Zitat von Tony-S (Beitrag 1078666)
Im Netz findet man die Unit "uLkJSON" (sourceforge.net/projects/lkjson/)

Schau dir mal SuperObject (http://www.progdigy.com) an. Meines Erachtens die schnellste und einfachste Komponente, um mit JSON zu arbeiten.
Eine einfaches
Delphi-Quellcode:
ob:=SO(jsonstring)
reicht aus, um einen Objektbaum aus einem JSON-String zu erzeugen. Dort kann man dann mit
Delphi-Quellcode:
ob.S['pfad']
auf die einzelnen (String-) Elemente zugreifen, mit
Delphi-Quellcode:
ob.O['pfad']
kommt man an die Objekte und mit
Delphi-Quellcode:
ob.A['pfad']
an die Arrays. Iteratoren gibt es auch;)

Tony-S 1. Feb 2011 20:21

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Zitat:

Zitat von Sir Rufo (Beitrag 1078671)
Schon mal mit
Code:
image.public_url
probiert?

Nein das geht so nicht, so hast du das sicher gemeint:

Delphi-Quellcode:
s2 := vartostr(js.Field['"image.public_url"'].Value);

Tony-S 1. Feb 2011 20:22

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Zitat:

Zitat von joachimd (Beitrag 1078767)
Zitat:

Zitat von Tony-S (Beitrag 1078666)
Im Netz findet man die Unit "uLkJSON" (sourceforge.net/projects/lkjson/)

Schau dir mal SuperObject (http://www.progdigy.com) an. Meines Erachtens die schnellste und einfachste Komponente, um mit JSON zu arbeiten.
Eine einfaches
Delphi-Quellcode:
ob:=SO(jsonstring)
reicht aus, um einen Objektbaum aus einem JSON-String zu erzeugen. Dort kann man dann mit
Delphi-Quellcode:
ob.S['pfad']
auf die einzelnen (String-) Elemente zugreifen, mit
Delphi-Quellcode:
ob.O['pfad']
kommt man an die Objekte und mit
Delphi-Quellcode:
ob.A['pfad']
an die Arrays. Iteratoren gibt es auch;)

Das hab ich mir jetzt auch mal heruntergeladen, was für eine Typ hat "ob" denn SuperObject?
Ist sicher auch interessant eine Lösung für beides zu haben.

webcss 1. Feb 2011 20:59

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Zitat:

Zitat von Tony-S (Beitrag 1078960)
Das hab ich mir jetzt auch mal heruntergeladen, was für eine Typ hat "ob" denn SuperObject?
Ist sicher auch interessant eine Lösung für beides zu haben.

Delphi-Quellcode:
var
  OB: ISuperObject;
begin
  OB:= SO(JSONString);
  writeln(OB.AsObject.S['Name']);
  ...
  ...
end;
Schau Dir einfach die WIKI dazu an. ;-)

Tony-S 1. Feb 2011 21:05

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Jop mach ich =), werd mich dann melden ;)

Sir Rufo 1. Feb 2011 21:16

AW: JSON parsen mit mehreren Eigenschaften pro Object
 
Zitat:

Zitat von Tony-S (Beitrag 1078959)
Zitat:

Zitat von Sir Rufo (Beitrag 1078671)
Schon mal mit
Code:
image.public_url
probiert?

Nein das geht so nicht, so hast du das sicher gemeint:

Delphi-Quellcode:
s2 := vartostr(js.Field['"image.public_url"'].Value);

Das Gerödel darum hatte ich mir gespart ... bei SuperObject wird der Pfad so angegeben (ja auch mit Gerödel drumrum)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz