AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JSON richtig parsen

Ein Thema von Hobbycoder · begonnen am 23. Mär 2017 · letzter Beitrag vom 25. Mär 2017
 
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#1

JSON richtig parsen

  Alt 23. Mär 2017, 11:17
Hi,

ich versucht seit Stunden ein JSON-String zu parsen, aber ich raff's nicht. Ich könnte mal ein bisschen Schützenhilfe von euch gebrauchen

Mein JSON-String sieht so aus:
Code:
[{"Lfdnr":"1","Fehlernummer":"1","Programmversion":"4.6.1.123","DBVersion":"15","Status":"1","Kategorie":"Testfehler","Dringlichkeit":"1","NoWork":"0","Kurzbeschreibung":"Das ist ein Testfehler","Langbeschreibung":"Das ist der Langtext von Testfehler","Benutzer":"HC","BenutzerName":"Hobbycoder","Datum":"2017-03-22 00:00:00","BehInVersion":"","BehDatum":"0000-00-00 00:00:00","BehVon":""},{"Lfdnr":"2","Fehlernummer":"1","Programmversion":"4.6.1.123","DBVersion":"15","Status":"1","Kategorie":"Testfehler","Dringlichkeit":"1","NoWork":"0","Kurzbeschreibung":"Das ist ein Testfehler","Langbeschreibung":"Das ist der Langtext von Testfehler","Benutzer":"HC","BenutzerName":"Hobbycoder","Datum":"2017-03-22 00:00:00","BehInVersion":"","BehDatum":"0000-00-00 00:00:00","BehVon":""},{"Lfdnr":"3","Fehlernummer":"2","Programmversion":"4.6.1.155","DBVersion":"200","Status":"2","Kategorie":"Nocheinekategorie","Dringlichkeit":"3","NoWork":"1","Kurzbeschreibung":"kb","Langbeschreibung":"lb","Benutzer":"WT","BenutzerName":"Willi Tester","Datum":"2017-03-22 00:00:00","BehInVersion":"","BehDatum":"0000-00-00 00:00:00","BehVon":""}]
Ziel ist es alle Elemente des Array in Objekte zu überführen.
Die Objekte sehen (etwas gekürzt) so aus:
Delphi-Quellcode:
 TErrorMessage=class
    property Lfdnr: Integer read FLfdnr write SetLfdnr;
    property Fehlernummer: string read FFehlernummer write SetFehlernummer;
    property Programmversion: string read FProgrammversion write SetProgrammversion;
    property DBVersion: string read FDBVersion write SetDBVersion;
    property Status: TEMStatus read FStatus write SetStatus;
    property Kategorie: string read FKategorie write SetKategorie;
    property Dringlichkeit: TEMDringlichkeit read FDringlichkeit write SetDringlichkeit;
    property NoWork: Boolean read FNoWork write SetNoWork;
    property Kurzbeschreibung: string read FKurzbeschreibung write SetKurzbeschreibung;
    property Langbeschreibung: string read FLangbeschreibung write SetLangbeschreibung;
    property Benutzer: string read FBenutzer write SetBenutzer;
    property Benutzername: string read FBenutzername write SetBenutzername;
    property Datum: TDateTime read FDatum write SetDatum;
    property BehInVersion: string read FBehInVersion write SetBehInVersion;
    property BenDatum: TDateTime read FBenDatum write SetBenDatum;
    property BenVon: string read FBenVon write SetBenVon;
  end;
Das Objekt habe ich hier nur mal aufgeführt, damit man sehen kann wie ich das ablegen will.

Mein Source dafür sie so aus:
Delphi-Quellcode:
procedure TErrorMessageList.GetListFromWeb(path: string);
var
  http: TIdHTTP;
  jsonstr: string;
  st: TStringStream;
  jsonval: TJSONValue;
  jsondsz: TJSONValue;
  em: TErrorMessage;
begin
  http:=TIdHTTP.Create(nil);
  st:=TStringStream.Create;
  try
    self.Clear;
    http.Get(path+'getlist.php', st);
    st.Position:=0;
    jsonstr:=st.ReadString(st.Size);
    try
      jsonval:=TJSONObject.ParseJSONValue(jsonstr);
// if json is TJSONArray then
// begin
        for jsondsz in (jsonval as TJSONArray) do
        begin
          Try
            em:=TErrorMessage.Create;
            em.Lfdnr:=StrToInt(TJSONString(jsondsz.GetValue('lfdnr')).Value);
            em.Fehlernummer:=jsondsz.GetValue('fehlernummer').ToString;
            em.Programmversion:=jsondsz.GetValue('programmversion').ToString;
            em.DBVersion:=jsondsz.GetValue('dbversion').ToString;
            em.Status:=TEMStatus(StrToInt(jsondsz.GetValue('status').ToString));
            em.Kategorie:=jsondsz.GetValue('kategorie').ToString;
            em.Dringlichkeit:=TEMDringlichkeit(StrToInt(jsondsz.GetValue('dringlichkeit').ToString));
            em.NoWork:=Int2Bool(StrToInt(jsondsz.GetValue('nowork').ToString));
            em.Kurzbeschreibung:=jsondsz.GetValue('kurzbeschreibung').ToString;
            em.Langbeschreibung:=jsondsz.GetValue('langbeschreibung').ToString;
            em.Benutzer:=jsondsz.GetValue('benutzer').ToString;
            em.Benutzername:=jsondsz.GetValue('benutzername').ToString;
            self.Add(em);
          except
            em.Free;
          End;
        end;
      //end;
    finally
    end;
  finally
    http.Free;
    st.Free;
  end;
end;
Nur so, läuft er nicht. Sieht auch ein bisschen verrissen aus, weil ich auf Grund der Beispiele im Internet das eine oder andere ausprobiert habe, aber nicht wirklich zu einem lauffähigen Ergebnis gekommen bin.
Nach Möglichkeit will ich nur System.json verwenden, und keine anderen oder fremde Units.

Wäre für eure Hilfe sehr dankbar.

Gruß Hobbycoder.
  Mit Zitat antworten Zitat
 


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 03:26 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 by Thomas Breitkreuz