AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein System.JSON TJsonObjectBuilder - fehlende Callback-Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

Ein Thema von TigerLilly · begonnen am 6. Dez 2018 · letzter Beitrag vom 7. Dez 2018
Antwort Antwort
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#1

System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 6. Dez 2018, 22:21
Ich habe diesen Code:

Code:
procedure TTabbedwithNavigationForm.DataToJSON;
var
  Builder: TJSONObjectBuilder;
  FileStream: TFileStream;
  sPath: string;
  StreamWriter: TStreamWriter;
  Writer: TJsonTextWriter;
begin
  sPath:= TPath.GetLibraryPath;
  FileStream := TFileStream.Create(sPath+'data.json',fmCreate);
  StreamWriter:= TStreamWriter.Create(FileStream);
  Writer := TJsonTextWriter.Create(StreamWriter);
  Writer.Formatting := TJsonFormatting.Indented;
  Builder := TJSONObjectBuilder.Create(Writer);
  Builder
    .BeginObject
      .BeginArray('Transaction')
        .BeginObject.Add('id', 662713)
          .Add('firstName', 'John')
          .Add('lastName', 'Doe')
          .Add('price', 2.1)
          .AddNull('parent_id')
          .Add('validated', true)
          .BeginObject('protocol')
            .Add('timestamp',DateTimeToStr(now))
            .Add('action','plus')
          .EndObject
        .EndObject
      .EndArray
    .EndObject;
  mmoLog.Lines.Add(Builder.AsJSON); <- Hier kommt die Meldung: Dieser Vorgang ist ohne zugewiesene Callback-Funktion nicht zulässig.
end;

Frage 1: Welche callback-Funktion ist da gemeint?
Frage 2: Ich möchte den JSON String haben, der in die Datei gespeichert wird. Mir gelingt bis jetzt nur eines von beiden: Entweder mit einem anderen Stream + dann habe ich den Text oder so wie hier, dann habe ich die Datei. Aber beides gleichzeitig?


Was übersehe ich?
Danke!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#2

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 08:45
Hilft dir das ?
https://www.delphipraxis.net/194193-...exception.html

Rollo
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 09:40
Eigentlich nicht. Die Writer sind ja assigned. Im Code sehe ich zwar, dass das Fehlen eines Readers ein Problem ist, aber wo und warum ich den ins Spiel bringen soll, erkenne ich nicht.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 09:43
Nachtrag: Ich möchte das Umkopieren vermeiden. Ich könnte ja den JSION String erzeugen, den einer StringList zuweisen und dann erst speichern. Aber da das ein großes JSON Konstrukt ist (bzw wird) würde ich das gern vermeiden.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 09:51
Also wenn ich das ausführen lasse, dann stoppt der Debugger (wegen besagter Exception) da
2018-12-07-09_47_44-window.png
Damit ist doch klar, woran es liegt und auch welche Callback-Funktion gemeint ist.

Nimm den Konstruktor wo du die GetReader-CallbackMethode angeben kannst und gib eine an.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 11:27
Die Doku sagt, AsJSON liefert den JSON String zurück, sagt aber nichts von einem Reader.
Ich habe jetzt kein Delphi bei der Hand, aber ich erinnere mich nur an Konstruktoren für WRITER.

Da es für dich so klar ist, was muss ich tun, damit mein Beispiel funktioniert?
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: System.JSON TJsonObjectBuilder - fehlende Callback-Funktion

  Alt 7. Dez 2018, 11:32
Die Doku sagt, AsJSON liefert den JSON String zurück, sagt aber nichts von einem Reader.
Ich habe jetzt kein Delphi bei der Hand, aber ich erinnere mich nur an Konstruktoren für WRITER.

Da es für dich so klar ist, was muss ich tun, damit mein Beispiel funktioniert?
Hier der Auszug aus dem Quelltext
Delphi-Quellcode:
    constructor Create(const AJSONWriter: TJSONWriter); overload;
    constructor Create(const AJSONWriter: TJSONWriter;
      AGetReader: TGetReaderProc; AReleaseReader: TReleaseReaderProc;
      AResetWriter: TResetWriterProc); overload;
Siehst du den zweiten Konstruktor, den mit den T...Proc Argumenten?

Den musst du verwenden (wie ich schon geschrieben habe).
  Mit Zitat antworten Zitat
Antwort Antwort


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:00 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