![]() |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Hallo,
damit kenne ich mich wirklich aus, aber
Delphi-Quellcode:
Das läßt sich doch sicher über lokale Variablen vereinfachen.
Builder
.BeginObject .Add('symbol', i.ToString) .Add('price', i) .EndObject;
Delphi-Quellcode:
Oder ist das jetzt wirklich was ganz neues?
BuilderObject:= Builder.BeginObject;
BuilderObject.Add() BuilderObject.Add() BuilderObject.EndObject; |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Klar geht das, aber was ist daran jetzt besser oder einfacher?
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Zitat:
[dcc32 Fehler] Unit1.pas(144): E2361 Auf private-Symbol TJSONCollectionBuilder.EndArray kann nicht zugegriffen werden Aber, wie gesagt, kommt er soweit ja garnicht. In der for-Schleife schmiert er ja schon ab ("dieser Vorgang ist nicht zulässig, nachdem Paare oder Elemente hinzugefügt wurden."). |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Ja, man müsste sich das begonnene Array merken:
Delphi-Quellcode:
(
procedure buildObject(const builder: TJSONObjectBuilder);
const values: TArray<Single> = [3.14, -99, 0, 12, 17]; var jsonObject: TJSONObjectBuilderPairs; jsonArray: TJSONArrayBuilderElements; value: Single; begin jsonObject := builder.BeginObject(); jsonArray := jsonObject .Add('text', 'Hello World') .Add('someNumber', 42) .BeginArray('values'); for value in values do jsonArray.Add(value); jsonArray.EndArray(); jsonObject .Add('some final text', 'this was added after the array') .EndObject(); end; ![]() Und ja, das ist nicht wirklich übersichtlicher als es "klassisch" zu machen, so wie du es momentan schon hast. Trotzdem, bei einfachen Dingen, das in einem Rutsch so durchzuziehen - Da kann man doch nichts gegen haben. Hat doch sicher jeder schon mal mit einem
Delphi-Quellcode:
auch so gemacht...
TStringBuilder
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Danke und klar, aber ich hasse es einfach, wenn ich etwas nicht hinbekomme. Aber folgendes könnte doch ein Ansatz sein. Ich bekomme aber immer nur 1 Objekt hin :-(
Ergebnis: sende: { "wowarer": [ { "id": "0", "location": "ort: 0" } ] } Hmm..
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
function GetPairs : String; var o: TJSONObject; begin // je datensatz ein objekt.. for var i : integer := 0 to 2 do begin o := TJSONObject.Create; o.AddPair('id',i.ToString); o.AddPair('location','ort: ' + i.ToString); result := result + o.ToJSON; o.free; end; end; var StringWriter: TStringWriter; Writer: TJsonTextWriter; Builder: TJSONObjectBuilder; begin // entspr. objekte erstellen.. StringWriter := TStringWriter.Create(); Writer := TJsonTextWriter.Create(StringWriter); Builder := TJSONObjectBuilder.Create(Writer); // json-antwort aufbereiten.. try // json-objekte ins json-format formatieren?? (none = std) Writer.Formatting := TJsonFormatting.Indented; Builder .BeginObject .BeginArray('wowarer') .BeginObject .AddPairs(GetPairs) .EndObject .EndArray .EndObject; memo1.Lines.Add('sende:' + sLineBreak + StringWriter.ToString); finally Builder.Free; Writer.Free; StringWriter.Free; end; end; |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Ich verstehe nicht ganz was du erwartet hättest. Dein
Delphi-Quellcode:
geht hin und macht einmal ein Array "wowarer" und steckt dort ein Objekt rein.
Button2Click
Du willst jetzt mehrere Objekte in diesem Array? Merke dir das Array und rufe auf ihm so oft du willst
Delphi-Quellcode:
auf. Das habe ich einen Beitrag darüber gezeigt.
AddValue(..)
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
haha, jetzt war ich so im "flow". Ich brauche ja auch nur 1 Objekt. Aber du hast mich da auf eine Idee gebracht - wird wohl spät werden heute. Ich poste mal was, wenn ich's hinbekommen habe. Tks und schönen Abend erstmal..
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Du brauchst ein Array mit mehreren Objekten wenn du eine Datenmenge mit mehreren Zeilen (Records) hast.
Deswegen bezweifel ich deine Aussage "Ich brauche ja auch nur 1 Objekt" sehr stark :gruebel: |
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Vielleicht meine er "nur eine Referenz auf das Array". Oder etwas ganz ausgefuchstes. Bald werden wir es erfahren 😎
|
AW: verstehe neue Vorgehensweise nicht wirklich :-(
Da bin ich auch grad drauf gekommen, als ich wieder in meinem Projekt war, Mist - bin schon völlig kirre! Ich brauche für jeden Datensatz 1 Objekt.
Ich habe mir jetzt nochmal das Ergebnis angesehen und eigentlich fehlt im Result zwischen den Objekten ja nur ein Komma. Der Builder schmeisst die dann logischerweise raus. Hmm.. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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