AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein verstehe neue Vorgehensweise nicht wirklich :-(
Thema durchsuchen
Ansicht
Themen-Optionen

verstehe neue Vorgehensweise nicht wirklich :-(

Ein Thema von exasoft · begonnen am 3. Jan 2019 · letzter Beitrag vom 4. Jan 2019
Antwort Antwort
Seite 2 von 3     12 3      
hoika
Online

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:06
Hallo,
damit kenne ich mich wirklich aus, aber

Delphi-Quellcode:
Builder
        .BeginObject
          .Add('symbol', i.ToString)
          .Add('price', i)
        .EndObject;
Das läßt sich doch sicher über lokale Variablen vereinfachen.
Delphi-Quellcode:
BuilderObject:= Builder.BeginObject;
BuilderObject.Add()
BuilderObject.Add()
BuilderObject.EndObject;
Oder ist das jetzt wirklich was ganz neues?
Heiko
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:07
Klar geht das, aber was ist daran jetzt besser oder einfacher?
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#13

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:18
Zitat:
Builder.EndArray;
Builder.EndObject;
// oder Builder.EndArray.EndObject;
funktioniert beides nicht - hatte ich auch schon versucht.

[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.").
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:35
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;
(Vollständiger Code)


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 TStringBuilder auch so gemacht...
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#15

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:44
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;

Geändert von exasoft ( 3. Jan 2019 um 15:47 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:50
Ich verstehe nicht ganz was du erwartet hättest. Dein Button2Click geht hin und macht einmal ein Array "wowarer" und steckt dort ein Objekt rein.


Du willst jetzt mehrere Objekte in diesem Array? Merke dir das Array und rufe auf ihm so oft du willst AddValue(..) auf. Das habe ich einen Beitrag darüber gezeigt.
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#17

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:54
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..
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 15:57
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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 16:02
Vielleicht meine er "nur eine Referenz auf das Array". Oder etwas ganz ausgefuchstes. Bald werden wir es erfahren 😎
  Mit Zitat antworten Zitat
Benutzerbild von exasoft
exasoft

Registriert seit: 19. Nov 2015
Ort: Frankfurt
47 Beiträge
 
#20

AW: verstehe neue Vorgehensweise nicht wirklich :-(

  Alt 3. Jan 2019, 16:08
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..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:37 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