![]() |
Wie kann man Klassen-Felder in eine Json-Datei speichern
Hallo zusammen,
bisher hatte ich gerne Ini-Dateien eingesetzt. In einem neuen Tool von mir möchte ich nun eine json-Datei anstelle einer ini-Datei anwenden. Also einige Klassen mit den benötigten Feldern erstellt (im Prinzip pro Sektion aus einer Ini-Datei eine eigene Klasse). Über
Delphi-Quellcode:
lese ich die Json-Datei in meine Json-Objektvariable ein.
my_jsonObj := TJSONObject.ParseJSONValue( TFile.ReadAllText(....
Danach weise ich meinen Klassen-Feldern die Werte über
Delphi-Quellcode:
zu.
JsonDatabaseParam.DatenbankName := my_jsonObj.GetValue<string>(...
Wie kann ich nun die Werte meiner Klassen-Felder in eine Json-Datei schreiben? Vielen Dank im Voraus und schöne Weihnachten! :xmas: |
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
Wenn du es einfach und bequem haben willst, dann würde ich dir die Neon-Library empfehlen.
![]() Die konvertiert auch komplexere Klassenstrukturen relativ problemlos nach JSON und wieder zurück. Man muss ggf. die Deklaration der Klasse leicht anpassen (z.B. Felder markieren, die nicht gespeichert werden sollen), aber nach kurzer Einarbeitung möchte ich das nicht mehr missen. Ansonsten halt die JSON-Struktur selber aufbauen ... |
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
Zitat:
![]() |
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
Ja, über SuperObject bin ich auch gestolpert bei meiner Suche nach sowas. Bin dann bei Neon gelandet, weil Neon auch Dictionaries direkt mit abfrühstückt - zumindest solche mit Strings als Key. Das war bei meinem Einsatzzweck wichtig. (Ging dabei um ein internes Tool für die Kommunikation mit VirusTotal, und ich wollte die relativ verschachtelten JSON-Antworten von der VT-API nicht selbst parsen. Da habe ich mir einfach eine passende Klassenstruktur gebaut und dann diese Library drauf angesetzt.)
|
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
|
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
Wenn du schon mit TJSONObject.ParseJSONValue arbeitest und deine Konfig-Klasse relativ einfach aufgebaut ist, dann nimm doch für das Gegenteil auch die mitgelieferte Funktion:
Delphi-Quellcode:
Klar, ist nicht so mächtig wie die Zusatzbibliotheken, die hier genannt wurden. Aber wenn das Lesen mit den Funktionen der RTL funktioniert, dann sollte es eigentlich auch fürs Schreiben reichen. Bei meinen einfachen Objekten funktioniert das so problemlos.
TFile.WriteAllText(TJson.ObjectToJsonString(my_jsonObj));
|
AW: Wie kann man Klassen-Felder in eine Json-Datei speichern
@Bbommel,
danke für den Hinweis :thumb:, ich hatte das auch schon gesehen. HAbe mich momentan (vorläufig) auf
Delphi-Quellcode:
und
TJsonTextWriter
Delphi-Quellcode:
festgelegt. Auch kann man sich so leicht eine mehrschichtige Struktur der Json-Datei aufbauen und die Datei lässt sich direkt formatieren, wenn gewünscht.
TStringWriter
Delphi-Quellcode:
Trotzdem habe ich angefangen mich in die Neon-Library einzuarbeiten, da ich in Zukunft wohl häufiger mit Json zu tun habe werde. Und das de- und serialisieren von ganzen Klassen scheint damit leicht möglich.
...
VAR Writer: TJsonTextWriter; StringWriter: TStringWriter; BEGIN StringWriter := TStringWriter.Create( ); Writer := TJsonTextWriter.Create( StringWriter ); Writer.Formatting := TJsonFormatting.Indented; Try Writer.WriteStartObject; Writer.WritePropertyName( 'Database' ); Writer.WriteStartObject; Writer.WritePropertyName( 'ServerName' ); Writer.WriteValue( JsonDatabaseParam.ServerName ); Writer.WritePropertyName( 'DBAdminUser' ); Writer.WriteValue( JsonDatabaseParam.DBAdminUser ); Writer.WritePropertyName( 'DatenbankName' ); Writer.WriteValue( JsonDatabaseParam.DatenbankName ); Writer.WritePropertyName( 'Password' ); Writer.WriteValue( JsonDatabaseParam.Password ); Writer.WritePropertyName( 'DatenbankProvider' ); Writer.WriteValue( JsonDatabaseParam.DatenbankProvider ); Writer.WriteEndObject; Writer.WritePropertyName( 'System' ); Writer.WriteStartObject; ... Writer.WriteEndObject; Writer.WriteEndObject; FINALLY StringWriter.Free; Writer.Free; END; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz