AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials JSON mit Superobject
Tutorial durchsuchen
Ansicht
Themen-Optionen

JSON mit Superobject

Ein Tutorial von Bummi · begonnen am 21. Sep 2012 · letzter Beitrag vom 18. Sep 2014
Antwort Antwort
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#1

JSON mit Superobject

  Alt 21. Sep 2012, 10:50
Nachdem ich mich kurzfristig einarbeiten musste und kaum brauchbare (funktionierende) Beispiele fand, habe ich mich entschlossen meine Erkenntnisse laufend hier zu veröffentlichen, falls jemand ähnliche Probleme haben sollte.
(wenn unpassend bitte löschen ...)
Voraussetzungen Delphi ab 2009 und Superobjects (mit für Delphi > 2009 entfernten IFDefs 210 ), bei der beiliegenden Version wurde da ich XE verwende, FHeapData durch FValueData ersetzt.

Teststruktur bei meinem ersten Versuch waren
Delphi-Quellcode:
  Type
  TPosition=Class(TObject)
    Nr:Integer;
    Bezeichnung:String;
    Preis:Currency;
  End;

  TPositionenList=Class(TObjectList<TPosition>);
  TRechnung=Class(TObject)
    RechnungsNummer:String;
    Positionen:TPositionenList;
    Constructor Create;
    Destructor Destroy;override;
  End;
  TRechnungsList=Class(TObjectList<TRechnung>);

  TKunde=Class(TObject)
    ID:Integer;
    Name:String;
    Vorname:String;
    Geboren:TDatetime;
    Rechnungen:TRechnungsList;
    Constructor Create(aID:Integer=0;aName:String='';aVorname:String='';aGeboren:TDateTime=0);
    Destructor Destroy;override;
  End;

  TKundenList=Class(TObjectList<TKunde>);
Der Knackpunkt die Deserialisierung der Objektlisten ....
Miniaturansicht angehängter Grafiken
json.png  
Angehängte Dateien
Dateityp: zip Demoprojekt_SRC.zip (120,7 KB, 199x aufgerufen)
Dateityp: zip Demoprojekt_exe.zip (621,5 KB, 93x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#2

AW: JSON mit Superobject

  Alt 17. Sep 2014, 12:51
Wie liest man denn bestehende JSON Daten aus?

Hab durch nen GET an ne API einiges an JSON-Daten zurückgeliefert bekommen und werd aus der Readme nicht sonderlich schlau.

{
"id": 3,
"description": "Mithilfe des Gitlab API Tester Programm ist es simpel Gitlab API Issues automatisiert zu erstellen. Das folgende Programm dient zu Veranschaulichung & Funktionsweise der Parameter.",
"default_branch": "master",
"public": false,
"archived": false,


Möchte in dem Fall "id" also die "3" auslesen, funktioniert aber leider nicht so wie es sollte:

Delphi-Quellcode:
procedure TMainForm.GetAllProjects(APIUrl, Token: String);
var
  HTTP : TIdHTTP;
  Cookie : TIdCookieManager;
  SSL : TIdSSLIOHandlerSocketOpenSSL;
  GetRes : String;
  Params : TStringList;
  data : ISuperObject;
  dataArray : TSuperArray;
  test: String;
  i, i2: Integer;
  Item : TListItem;
begin
  HTTP := TIdHTTP.Create(NIL);
  Cookie := TIdCookieManager.Create(HTTP);
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
  HTTP.CookieManager := Cookie;
  HTTP.IOHandler := SSL;
  HTTP.HandleRedirects := True;
  HTTP.Request.UserAgent :=
  'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
  HTTP.AllowCookies := True;

  Params := TStringList.Create;
  Cookie.CookieCollection.Clear;

  APIUrl := APIUrl + 'projects/all?private_token=' + Token;
  GetRes := HTTP.Get(APIUrl);

  data := SO(GetRes);
   test := data..AsObject.S['id']; // get a string; //crap will net :(

  HTTP.Free;
end;
00111100001100110010000001000100011001010110110001 1100000110100001101001
  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
 
#3

AW: JSON mit Superobject

  Alt 17. Sep 2014, 14:16
Geht doch ganz hervorragend:
Delphi-Quellcode:
program dp_170530;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  SysUtils,
  superobject;

const
  JSON_RESPONSE = //
    '{"id": 3,' + //
    '"description": "Mithilfe des Gitlab API Tester Programm ist es simpel Gitlab API Issues automatisiert zu erstellen. Das folgende Programm dient zu Veranschaulichung & Funktionsweise der Parameter.",'
    + '"default_branch": "master",' + //
    '"public": false,' + //
    '"archived": false}';

procedure TestJson;
var
  data: ISuperObject;
  test: string;
  testint : Integer;
begin
  data := SO( JSON_RESPONSE );

  test := data.AsObject.S['id'];
  Writeln( test );
  test := data.S['id'];
  Writeln( test );
  testint := data.I['id'];
  Writeln( testint );
end;

begin
  try
    TestJson;
  except
    on E: Exception do
      Writeln( E.ClassName, ': ', E.Message );
  end;
  ReadLn;

end.
Dein Code sieht aber auch sehr seltsam aus
Delphi-Quellcode:
// Warum sind da ZWEI Punkte???
data..AsObject.S['id'];
Und wenn du eventuell - wenn es nicht zu geheim ist - die Fehlermeldung dazuschreiben könntest ...
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
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: JSON mit Superobject

  Alt 17. Sep 2014, 14:54
Crosspost: http://stackoverflow.com/questions/2...th-superobject

Bitte beim nächsten Mal - freundlicherweise - selber eintragen
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
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#5

AW: JSON mit Superobject

  Alt 17. Sep 2014, 15:00
Geht doch ganz hervorragend:

Und wenn du eventuell - wenn es nicht zu geheim ist - die Fehlermeldung dazuschreiben könntest ...
Ich hab absolut keine Ahnung warum bei mir der Fehler hochkommt:

Fehlermeldung
IDE-Ansicht

Code:

Delphi-Quellcode:
  data := SO(GetRes);
  test := data.AsObject.S['id'];
  ShowMessage(test);
Ich mein die Doku hab ich mir davor ja schon durchgelesen und mir das Hirn zermatert wieso ich immer ne Zugriffsverletzung bekomme...Dein Demoprogramm von dir Rufo läuft übrigens einwandfrei. Auch nochmal ein dickes Dankeschön für deine Mühe.

Keine Ahnung wieso er genau bei "test := data.AsObject.S['id'];" immer ne Zugriffsverletzung schmeißt.
Miniaturansicht angehängter Grafiken
3failvq.png   k5zfbwl.jpg  
00111100001100110010000001000100011001010110110001 1100000110100001101001

Geändert von TBx (18. Sep 2014 um 12:21 Uhr) Grund: Bilder angehängt, bitte nicht extern verlinken
  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
 
#6

AW: JSON mit Superobject

  Alt 17. Sep 2014, 15:22
Weil mein Demo-Programm mit den Daten arbeitet, die du hier als Beispiel zeigst.

Dein Programm arbeitet mit anderen Daten ... (siehe auch SO)
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
Benutzerbild von Back2Code
Back2Code

Registriert seit: 6. Feb 2012
Ort: Deutschland
272 Beiträge
 
Delphi XE7 Professional
 
#7

AW: JSON mit Superobject

  Alt 17. Sep 2014, 15:35
Das ist wenigstens ein kleiner Hinweis. Ich werd mal meinen Response checken & dann berichten
00111100001100110010000001000100011001010110110001 1100000110100001101001
  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 17:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz