Einzelnen Beitrag anzeigen

Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
824 Beiträge
 
Delphi 10.4 Sydney
 
#1

JSON in TFDQuery

  Alt 6. Jun 2023, 17:12
Datenbank: MySQL • Version: 5 • Zugriff über: FireDac
Hallo Zusammen,

es geht zwar nicht wirklich um Datenbanken, aber Query und JSON, daher habe ich das Thema jetzt mal hier platziert.

Ich greife über eine API den Status von Maschinen ab. Das habe ich bislang über FDQueries auf der Datenbak gemacht, soll aber jetzt über die API laufen...

Die Abfrage soll später auf einer Serverinstance laufen, die Daten in einer Query ablegen, wo die Clients sich diese über eine Service-Abfrage rausholen...

In meinem Test-Programm habe ich eine TIdHTTP Komponente, mit der ich die Daten abfrage. Ich bekomme ein JSON in einen TStream zurück. Diesen Stream möchte ich gerne in eine FDQuery mit LoadFrom Stream laden.

Hier der Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var LStream: TMemoryStream;
begin
   LStream := TMemoryStream.Create;
   Try
      IdHTTP.Get(edt_URL.Text, LStream);
      FDQuery.LoadFromStream(LStream, sfJSON);
   Finally
      LStream.Free;
   End;
end;
Leider funktioniert dieser Weg neicht, denn ich bekomme immer eine Fehlermeldung:
Ungültiges JSON-Speicherformat Position 1020 aufgetreten. Ich habe dann den Stream in eine Datei gespeichert um zu sehen, was da drinsteht:
Code:
{"error":null,"device":{"id":"4106","name":"XL106-8PL","classId":"ID_SheetfedPress","deviceStatus":{"status":"Running","activity":"Gutproduktion","speed":15000,"totalizer":96280594,"workstep":{"id":"CV__1182420004","name":"ST118242  4/4","job":{"id":"305537","name":"Panorama","jobCustomer":{"id":"022075","name":"Life e. V."},"customerOrderId":"305537"},"status":"RUNNING","amountPlanned":75075,"wastePlanned":775,"amountProduced":30293,"wasteProduced":999,"deviceId":"4106","types":["ConventionalPrinting"],"sequenceType":"SheetfedPrinting","start":"2023-06-05T11:25:55+02:00","end":"2023-06-05T13:18:09+02:00","startPlanned":null,"endPlanned":null,"setuptimePlanned":480,"prodtimePlanned":20160,"actualTimes":[{"timeTypeGroupName":"Fertigungszeit","timeTypeName":"Ausführungszeit","duration":10413},{"timeTypeGroupName":"Fertigungszeit","timeTypeName":"Rüstzeit","duration":1304}]},"employees":[{"id":"231","name":"Rosse","firstName":"Kevin"},{"id":"233","name":"Resse","firstName":"David"}]}}}
Über einen Online-JSON-Reader habe ich das geprüft, das scheint in Ordnung zu sein.
Die Position 1020 ist die vorletzte Klammer...

Hat jemand eine Idee, was ich falsch mache? Wäre eine schöne und einfache Lösung, an der jetzt schon einige Zeit scheitere...

Vielen Dank Patrick
Patrick

Geändert von Ykcim ( 6. Jun 2023 um 23:12 Uhr)
  Mit Zitat antworten Zitat