Registriert seit: 22. Feb 2017
955 Beiträge
|
JSON richtig parsen
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.
|