Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   verstehe neue Vorgehensweise nicht wirklich :-( (https://www.delphipraxis.net/199185-verstehe-neue-vorgehensweise-nicht-wirklich.html)

Neutral General 3. Jan 2019 16:28

AW: verstehe neue Vorgehensweise nicht wirklich :-(
 
Im Prinzip stand alles was du wissen musst in der ersten Antwort:

Zitat:

Zitat von Der schöne Günther (Beitrag 1422525)
Kurz ausgedrückt: Du rutscht über ein
Delphi-Quellcode:
TDataSet
drüber und willst für jede Zeile ein neues Json-Objekt in ein Json-Array stecken. Richtig?


Ich würde erst einmal dein
Delphi-Quellcode:
System.Json.TJsonArray
erstellen. Dann "pro Zeile" ein TJsonObject erstellen (über deinen
Delphi-Quellcode:
TJSONObjectBuilder
oder wie auch immer) und das mittels
Delphi-Quellcode:
myJsonArray.AddElement(meinFrischErstelltesObjekt)
hinzufügen.


exasoft 4. Jan 2019 11:31

AW: verstehe neue Vorgehensweise nicht wirklich :-(
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin @ALL,
also, habs jetzt so (s.u.) gemacht und klappt auch super (s. Anhang).
Bitte nicht über die ausführlichen Kommentare wundern - dient als Lehrstoff. Und falls noch jemand etwas anzumerken hätte - alls her damit.

Tks nochmal..

Delphi-Quellcode:
  // json-antwort aufbereiten..
  // entspr. objekte erstellen..
  StringWriter := TStringWriter.Create();
  Writer := TJsonTextWriter.Create(StringWriter);

  try
    // json-antwort formatiert aufbereiten??
    if uglobal.JSON_FORMATIEREN then
      Writer.Formatting := TJsonFormatting.Indented;

    // beginn json-objekt für tabelle..
    Writer.WriteStartObject;
    Writer.WritePropertyName('wowarer');
    // beginn json-array für tabelle..
    Writer.WriteStartArray;

    // datensaetze scannen..
    dm.qryWoWarer.First; // vorsichtshalber auf ersten ds
    // info: diese form des scannens, weil man desöfteren im scanvorgang einen index (i) gebrauchen kann
    // alternativ: while NOT dm.qryWoWarer.Eof do begin - dann entfällt "nächster datensaetz"
    for var i: integer := 0 to dm.qryWoWarer.RecordCount - 1 do begin
      // für jeden ds ein json-objekt erstellen..
      // beginn json-objekt..
      Writer.WriteStartObject;
      // entspr. tabellen-felder mit deren werten in json-objekt..
      Writer.WritePropertyName('id');
      Writer.WriteValue(dm.qryWoWarer.FieldByName('id').AsInteger);
      Writer.WritePropertyName('location');
      Writer.WriteValue(dm.qryWoWarer.FieldByName('location').AsString);
      // ende json-objekt..
      Writer.WriteEndObject;
      // nächster datensaetz..
      dm.qryWoWarer.Next;
    end;

    // ende json-array für tabelle..
    Writer.WriteEndArray;
    // ende json-objekt für tabelle..
    Writer.WriteEndObject;

    // prot..
    if uglobal.OGProtokoll.Protokollieren then begin
      uglobal.AddToProtokoll('Anforderung gesendet');
      if uglobal.OGProtokoll.ProtokollierenJSONString then begin
        // JSON-String formatiert ausgeben..
        uglobal.AddToProtokoll('sende:' + sLineBreak + StringWriter.ToString,false,true);
      end;
    end;

    // senden..
    // ContentType setzen, damit der client weiss welche art daten..
    Response.ContentType := 'text/plain; charset="UTF-8"';
    // und, weil webbies... - alles als string liefern..
    Response.Content := StringWriter.ToString;
  finally
    Writer.Free;
    StringWriter.Free;
  end;

Der schöne Günther 4. Jan 2019 11:42

AW: verstehe neue Vorgehensweise nicht wirklich :-(
 
Wow, nett.
Delphi-Quellcode:
WriteStartObject()
und Konsorten kannte ich noch nicht. Das ist natürlich besser 👍

Mir würde nur das fehlende try..finally zwischen
Delphi-Quellcode:
WriteStartObject()
und
Delphi-Quellcode:
WriteEndObject()
(analog das Array) stören. Und den inneren Teil mit der Schleife in eine eigene Methode rausziehen, das ist ja schon etwas lang.


Die WriteStartXX-Dinge sind mir echt neu. Wieder was gelernt 😊

exasoft 4. Jan 2019 11:52

AW: verstehe neue Vorgehensweise nicht wirklich :-(
 
ich weiß, aber optimiert wird immer erst später ;-) Baue gerade ein DatenModul rein..


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 3 von 3     123   

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