![]() |
verstehe neue Vorgehensweise nicht wirklich :-(
Moin,
arbeite mich gerade in "neuere Techniken" ein - komme aber mit folgendem Beispiel nicht klar. (Daten per "neuem" JSONObjectBuilder-Objekt aufbereiten)
Delphi-Quellcode:
Wenn ich jetzt aber die Daten aus einer DB aufbereiten will: Wie kann ich dann einen "BeginObject" und "EndObject" PRO DB-Zeile machen?
var
StringWriter: TStringWriter; Writer: TJsonTextWriter; Builder: TJSONObjectBuilder; begin ... // entspr. objekte erstellen.. StringWriter := TStringWriter.Create(); Writer := TJsonTextWriter.Create(StringWriter); Builder := TJSONObjectBuilder.Create(Writer); Builder .BeginObject .BeginArray('wowarer') .BeginObject .Add('symbol', 'ACME') .Add('price', 75.5) .EndObject .BeginObject .Add('symbol', 'COOL') .Add('price', 21.7) .EndObject .EndArray .EndObject; Wäre super.. Tks |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Kurz ausgedrückt: Du rutscht über ein
Delphi-Quellcode:
drüber und willst für jede Zeile ein neues Json-Objekt in ein Json-Array stecken. Richtig?
TDataSet
Ich würde erst einmal dein
Delphi-Quellcode:
erstellen. Dann "pro Zeile" ein TJsonObject erstellen (über deinen
System.Json.TJsonArray
Delphi-Quellcode:
oder wie auch immer) und das mittels
TJSONObjectBuilder
Delphi-Quellcode:
hinzufügen.
myJsonArray.AddElement(meinFrischErstelltesObjekt)
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
so hatte ich es auch immer gemacht - dachte nur das ginge auch irgendwie mit dieser "Punktnotationsarie".
Danke..
Delphi-Quellcode:
// json-array für die rückgabe der daten erstellen..
a := TJSONArray.Create; try // DARF EIGTL NUR EINEN DS FINDEN - source aber für später so belassen // auf ersten satz pos.. dm.qryWoIsser.First; // saetze scannen.. while (NOT dm.qryWoIsser.Eof) do begin // fuer jeden ds ein json-objekt erstellen.. o := TJSONObject.Create; // fuer jedes gewuenschte qry-feld einen eintrag im json-objekt erstellen.. o.AddPair('id',dm.qryWoIsser.FieldByName('id').AsString); o.AddPair('location',dm.qryWoIsser.FieldByName('location').AsString); // objekt dem json-array hinzufügen.. a.AddElement(o); // nächster ds.. dm.qryWoIsser.Next; |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Klar, gehen müsste das auch: Es zwingt dich ja niemand in einem einzigen Statement, ohne abzusetzen, das Array auch wieder direkt abzuschließen.
Du könntest doch:
Stelle ich mir nur mit vernünftiger Exception-Behandlung (Array und Objekt auf jeden Fall ordentlich abschließen) etwas schwieriger vor. PS: Genannt wird die "neuere Technik" übrigens "Fluent Interface". ![]() |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Na, da wünsche ich viel Spaß beim Debuggen. Allein um mit F7 endlich in den richtigen Teil reinzukommen. Wie kommt eigentlich die Code-Formatierung mit dieser Geschichte klar? Wird das so wie hier zu sehen formatiert, oder klatscht der wieder alles zusammen in eine Zeile?
Sherlock |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
ich habe da immer ne "unsichtbare" Protokollierung mitlaufen - debugger bin ich kein Fan von. Ich weiß... - aber das kann ich mir live bei Kunden ansehen, mailen lassen, etc.
Bin eigentlich auch kein großer Fan der ganzen neuen Gimmicks - aber man sollte sie halt kennen und manche sind auch echt cool. Trete halt seit rund 10 Jahren auf meinem "Wissen" rum und erlebe Delphi/FMX gerade "neu", weil ich grad Zeit hab. Bin an der Sache noch dran und, sollte ich es hinbekommen, dann post ich mal was zum "verbessern" :oops: |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Zitat:
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
übrigens betreffend:
Zitat:
sobald ich "scannen" bzw das 2. Mal auf Builder zugreifen will, bekomme ich "dieser Vorgang ist nicht zulässig, nachdem Paare oder Elemente hinzugefügt wurden."
Delphi-Quellcode:
ne Idee? Aber vielleicht ist meine Denke auch völlig falsch. Ich stelle mir das, wie ein Stream vor (also "Fluent Interface") - die jeweils letzte Anweisung liefert das Objekt für die Parent-Anweisung, richtig?
Builder
.BeginObject .BeginArray('wowarer'); for var i : integer := 0 to 2 do begin Builder .BeginObject .Add('symbol', i.ToString) .Add('price', i) .EndObject; end; Builder.BeginObject.EndObject; Builder.BeginObject.BeginArray('wowarer').EndArray; Tks.. |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
@jaenicke: Hast ja recht - ich werde mich bessern. Steht jetzt auch auf der Liste..
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Die letzten beide Zeilen müssen so sein:
Delphi-Quellcode:
Builder.EndArray;
Builder.EndObject; // oder Builder.EndArray.EndObject; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 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