![]() |
JSON in DataSet
Hallo Zusammen,
ich versuche gerade meine erste Client - Server Application zu erstellen. Ich nutze dazu xData von TMS und komme auch schon recht weit. Ich habe einen Server erstellt, der die Abfragen ausführt. Er liefert als Ergebnis einen JSON-Stream zurück.
Delphi-Quellcode:
Query_Main.SaveToStream(AStream, sfJSON);
In der VCL-Umgebung kann ich diesen Stream in eine TFDMemTable einlesen
Delphi-Quellcode:
und dann mit einem DataSource zur Verfügung stellen. Das klappt auch sehr gut.
Table_Abteilung.LoadFromStream(LStream, sfJSON);
Für eine WEB_Aplication müsste ich das Ganze in ein DataSet versuchen zu bringen. Und dabei scheiter ich leider.
Delphi-Quellcode:
Angeblich müsste es so funktionieren. Aber der Wert 'value' liefert null zurück. Ich muss wahrscheinlich einen anderen angeben. Trotz großer Mühe und Suche finde ich nicht heraus, wie der Pfad aussehen muss.
procedure TFrmMain.btnAbteilungClick(Sender: TObject);
procedure OnResponse(Response: TXDataClientResponse); begin XDS_Abteilung.SetJsonData(TJSArray(TJSObject(Response.Result)['value'])); XDS_Abteilung.Open; end; begin XMyClient.RawInvoke('IData_xChangeService.Get_Abteilung',[], @OnResponse); end; Hier der JSON-Stream:
Code:
Kann mir irgendjemand einen Schups geben? Entweder das ich den Pfad erkennen kann oder wie man den Stream anderweitig in ein DataSet bekommt?
{"FDBS":
{"Version":15,"Manager": {"UpdatesRegistry":true,"TableList":[ {"class":"Table","Name":"Query_Main","SourceName":"abteilung","SourceID":1,"TabID":0,"EnforceConstraints":false,"MinimumCapacity":50,"ColumnList":[ {"class":"Column","Name":"AbteilungsID","SourceName":"AbteilungsID","SourceID":1,"DataType":"UInt32","Precision":10,"Searchable":true,"AllowNull":true,"AutoInc":true,"Base":true,"AutoIncrementSeed":-1,"AutoIncrementStep":-1,"OAllowNull":true,"OInWhere":true,"OInKey":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"AbteilungsID","SourcePrecision":10}, {"class":"Column","Name":"Abteilung","SourceName":"Abteilung","SourceID":2,"DataType":"AnsiString","Size":45,"Searchable":true,"AllowNull":true,"Default":true,"Base":true,"OAllowNull":true,"OInUpdate":true,"OInWhere":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"Abteilung","SourceSize":45}, {"class":"Column","Name":"Test","SourceName":"Test","SourceID":3,"DataType":"AnsiString","Size":45,"Searchable":true,"AllowNull":true,"Default":true,"Base":true,"OAllowNull":true,"OInUpdate":true,"OInWhere":true,"OAfterInsChanged":true,"OriginTabName":"nedcom2.abteilung","OriginColName":"Test","SourceSize":45}], "ConstraintList":[],"ViewList":[],"RowList":[ {"RowID":0,"Original": {"AbteilungsID":10,"Abteilung":"Verkauf","Test":"0"} }, {"RowID":1,"Original": {"AbteilungsID":20, "Abteilung":"Anwendung & Entwicklung", "Test":"0"} }, {"RowID":2,"Original": {"AbteilungsID":30, "Abteilung":"Technische Büro", "Test":"0"} }, {"RowID":3,"Original": {"AbteilungsID":40, "Abteilung":"Arbeitsvorbereitung", "Test":"0"} }, {"RowID":4,"Original": {"AbteilungsID":50, "Abteilung":"Produktion", "Test":"0"} }] }], "RelationList":[]} } } Vielen Dank Patrick |
AW: JSON in DataSet
Ich kann in dem ganzen JSON kein Array namens value finden.
|
AW: JSON in DataSet
Ja, das ist mir bewusst. Ich habe das in der Doku immer wieder gefunden, dass ich erst dachte, dass wäre eine reservierte Bezeichnung. Dann bin ich hingegangen und habe alle möglichen Variationen versucht. Wenn ich das in der Doku über JSON richtig verstanden habe, dann muss ich quasi einen Pfad der innerhalb des Streams zu den gewünschten Daten führt angeben.
Aber wie sähe der hier aus??? Ich finde auch nirgends die Eigenschaft "array", wie ich es in anderen Beispielen von JSON-Dateien gesehen habe... Vielen Dank Patrick |
AW: JSON in DataSet
Ich habe von XData keine Ahnung, aber wenn ich es richtig sehe, ist der strukturelle Aufbau Deines JSON folgendermaßen:
Code:
Hauptobjekt
-> FDBS -> Manager -> TableList -> ColumnList (Array) -> ConstraintList (Array) -> ViewList (Array) -> RowList (Array) -> RelationList (Array) |
AW: JSON in DataSet
ok, das hilft mir, das JSON besser zu verstehen!
Ich habe es jetzt so versucht:
Delphi-Quellcode:
XDS_Abteilung.SetJsonData(TJSArray(TJSObject(Response.Result)['FDBS.Manager.Tablelist.RowList']));
Leider klappt es noch nicht... ErrorMessage: Cannot read property 'FDBS.Manager.Tablelist.RowList' of null at OnResponse Wie wird dieser "Pfad" (['FDBS.Manager.Tablelist.RowList']) überlicherweise angegeben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 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