[gelöst] Wie erstellt man ein TJSONArray mit TJSONObjekten?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
kirchfritz
Beiträge: 169
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

[gelöst] Wie erstellt man ein TJSONArray mit TJSONObjekten?

Beitrag von kirchfritz »

Hallo,
ich möchte ein JSON Array erstellen, das aus mehreren JSONObjekten besteht und ungefähr so aussehen soll:

Code: Alles auswählen

[
  {
    "name": "PAULINO",
    "surname": "CATALAN"
  },
  {
    "name": "JOSE IGNACIO",
    "surname": "RODRIGUEZ"
  },
  {
    "name": "MUSTAPHA",
    "surname": "DE LA FUENTE"
  }
]
Dazu habe ich folgende Freepascal Procedure geschrieben:

Code: Alles auswählen

procedure fakeadressenEndpoint(req: TRequest; res: TResponse);
var
  jObject : TJSONObject;
  jArray  : TJSONArray;
  i : integer;
begin
  jArray := TJSONArray.Create;
  try
    for i := 1 to 10 do
    begin
      jObject := TJSONObject.Create;
      jObject.Strings['fakeadressen'] := format('Version %d',[i]);
      jObject.Strings['Name'] := format('Name %d',[i]);
      jArray.Add(jObject);
      jObject.Free;
    end;
    jsonResponse(res, jArray.AsJSON);  // Ausgaberoutine 
  finally
    jArray.Free;
  end;
end; 
Leider erhalte ich immer folgende Fehlermeldung:
Error: Adding an object to an array twice is not allowed

Kann mir jemand sagen, was an meinem Code "falsch" ist? Meine FOR-Schleife soll zehnmal durchlaufen werden, dabei erstelle ich jeweils ein TJSONObject, weise dem zwei Strings zu, und hänge dann das JSON Object in das JSONArray. Warum klappt das nicht?

Grüße aus Nürnberg,
Fritz
Zuletzt geändert von kirchfritz am So 2. Mai 2021, 19:21, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Wie erstellt man ein TJSONArray mit TJSONObjekten?

Beitrag von Socke »

Die Objekte werden nicht in das Array kopiert. Daher darfst du jObject nicht freigeben. Die Objekte werden automatisch zusammen mit dem Array freigeben.

Wenn du vorhandene JSON-Daten in eine neue Struktur überführen willst, kannst du die alten Daten entweder Kopieren (Methode: Clone) oder extrahieren (Methode Extract).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

kirchfritz
Beiträge: 169
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win10 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

[gelöst]Wie erstellt man ein TJSONArray mit TJSONObjekten?

Beitrag von kirchfritz »

Problem gelöst!
Danke für die schnelle Antwort.

Antworten