AGB  ·  Datenschutz  ·  Impressum  







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

JSON in DataSet

Ein Thema von Ykcim · begonnen am 31. Okt 2019 · letzter Beitrag vom 31. Okt 2019
Antwort Antwort
Ykcim

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

JSON in DataSet

  Alt 31. Okt 2019, 15:15
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. Query_Main.SaveToStream(AStream, sfJSON);
In der VCL-Umgebung kann ich diesen Stream in eine TFDMemTable einlesen Table_Abteilung.LoadFromStream(LStream, sfJSON); und dann mit einem DataSource zur Verfügung stellen. Das klappt auch sehr gut.
Für eine WEB_Aplication müsste ich das Ganze in ein DataSet versuchen zu bringen. Und dabei scheiter ich leider.

Delphi-Quellcode:
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;
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.

Hier der JSON-Stream:
Code:
{"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":[]}
   }
}
Kann mir irgendjemand einen Schups geben? Entweder das ich den Pfad erkennen kann oder wie man den Stream anderweitig in ein DataSet bekommt?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: JSON in DataSet

  Alt 31. Okt 2019, 15:18
Ich kann in dem ganzen JSON kein Array namens value finden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ykcim

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

AW: JSON in DataSet

  Alt 31. Okt 2019, 15:24
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
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

AW: JSON in DataSet

  Alt 31. Okt 2019, 15:32
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)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (31. Okt 2019 um 15:46 Uhr) Grund: Tippfehler korrigiert
  Mit Zitat antworten Zitat
Ykcim

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

AW: JSON in DataSet

  Alt 31. Okt 2019, 15:40
ok, das hilft mir, das JSON besser zu verstehen!

Ich habe es jetzt so versucht:
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?
Patrick

Geändert von Ykcim (31. Okt 2019 um 15:58 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz