Hallo Gemeinde,
ich habe einen Datasnap-Server mit diesen WebMethods-Datenmodul.
Ich möchte Daten von dem Server abholen und per
HTML-Seite zur Anzeige bringen.
Gegen sei diese Datenstruktur:
Delphi-Quellcode:
TDeviceInfo = class
public
SerialNumber: Integer;
Name: string;
Data: string;
end;
TDeviceInfoContainer = class
Devices: TArray<TDeviceInfo>;
end;
TDeviceInfoList = TObjectList<TDeviceInfo>;
Das Erzeugen des JSON-Strings geschieht so:
Delphi-Quellcode:
function TDeviceListener.GetDeviceInfoList: string;
var
DeviceInfo: TDeviceInfo;
DeviceInfoList: TDeviceInfoList;
DeviceInfoContainer: TDeviceInfoContainer;
Item: TPair<Integer, string>;
begin
DeviceInfoList := TDeviceInfoList.Create;
try
for Item in FDeviceDictionary do
begin
DeviceInfo := TDeviceInfo.Create;
DeviceInfo.SerialNumber := Item.Key;
DeviceInfo.Name := Item.Value;
DeviceInfo.Data := FDataList.GetViewData(DeviceInfo.SerialNumber);
DeviceInfoList.Add(DeviceInfo)
end;
DeviceInfoContainer := TDeviceInfoContainer.Create;
try
DeviceInfoContainer.Devices := DeviceInfoList.ToArray;
Result := TJson.ObjectToJsonString(DeviceInfoContainer);
finally
DeviceInfoContainer.Free;
end;
finally
DeviceInfoList.Free;
end;
end;
Das Result sieht dann als Delphi-String so aus:
Delphi-Quellcode:
'{
"devices": [{
"serialNumber": 12345,
"name": "Station 1",
"data": ""
}, {
"serialNumber": 54321,
"name": "Gerät 1",
"data": "09.05. 13:55:18 Logeintrag 1\r\n09.05. 13:55:18 ISO\r\n09.05. 13:55:18 Logeintrag 2\r\n09.05. 13:55:18 Logeintrag 3\r\n09.05. 13:55:18 Logeintrag 4 \r\n09.05. 13:55:18 Logeintrag 5\r\n"
}]
}'
Das scheint auch ein valides JSON zu sein.
Mein Problem ist jetzt, wie ich das auf der Javascript-Seite auseinander gefummelt kriege. Ich bin da etwas unbefleckt und habe gerade gar keinen Ansatz.
Code:
// Javascript:
var devicesObject = serverMethods().GetDeviceInfo();
Laut Console des Chrome steht auch das richtige drin und es wird als Object interpretiert (siehe Bildanhang).
Ich habe aber irgendwie keinen Ansatz, wie ich an die einzelnen Elemente des Arrays kommen soll, geschweige denn an die einzelnen Werte serialNumber, name oder data.
Das Javascript-object selber bietet mir nur result als Eigenschaft.
Weiß jemand Rat?