AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML JSON parsen mit mehreren Eigenschaften pro Object
Thema durchsuchen
Ansicht
Themen-Optionen

JSON parsen mit mehreren Eigenschaften pro Object

Ein Thema von Tony-S · begonnen am 31. Jan 2011 · letzter Beitrag vom 1. Feb 2011
Antwort Antwort
Tony-S

Registriert seit: 20. Feb 2009
4 Beiträge
 
#1

JSON parsen mit mehreren Eigenschaften pro Object

  Alt 31. Jan 2011, 22:35
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 00:42
Schon mal mit
Code:
image.public_url
probiert?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#3

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 09:27
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]
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 10:43
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 ob:=SO(jsonstring) reicht aus, um einen Objektbaum aus einem JSON-String zu erzeugen. Dort kann man dann mit ob.S['pfad'] auf die einzelnen (String-) Elemente zugreifen, mit ob.O['pfad'] kommt man an die Objekte und mit ob.A['pfad'] an die Arrays. Iteratoren gibt es auch
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Tony-S

Registriert seit: 20. Feb 2009
4 Beiträge
 
#5

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 20:21
Schon mal mit
Code:
image.public_url
probiert?
Nein das geht so nicht, so hast du das sicher gemeint:

s2 := vartostr(js.Field['"image.public_url"'].Value);
  Mit Zitat antworten Zitat
Tony-S

Registriert seit: 20. Feb 2009
4 Beiträge
 
#6

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 20:22
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 ob:=SO(jsonstring) reicht aus, um einen Objektbaum aus einem JSON-String zu erzeugen. Dort kann man dann mit ob.S['pfad'] auf die einzelnen (String-) Elemente zugreifen, mit ob.O['pfad'] kommt man an die Objekte und mit 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.
  Mit Zitat antworten Zitat
webcss

Registriert seit: 10. Feb 2006
255 Beiträge
 
Delphi XE2 Professional
 
#7

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 20:59
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.
"Wer seinem Computer Mist erzählt, muss immer damit rechnen..." (unbekannt)
"Der Computer rechnet damit, dass der Mensch denkt..." (auch unbekannt)
mein blog
  Mit Zitat antworten Zitat
Tony-S

Registriert seit: 20. Feb 2009
4 Beiträge
 
#8

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 21:05
Jop mach ich =), werd mich dann melden
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: JSON parsen mit mehreren Eigenschaften pro Object

  Alt 1. Feb 2011, 21:16
Schon mal mit
Code:
image.public_url
probiert?
Nein das geht so nicht, so hast du das sicher gemeint:

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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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