AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Wie kann man Klassen-Felder in eine Json-Datei speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann man Klassen-Felder in eine Json-Datei speichern

Ein Thema von juergen · begonnen am 24. Dez 2022 · letzter Beitrag vom 28. Dez 2022
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 24. Dez 2022, 23:25
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 my_jsonObj := TJSONObject.ParseJSONValue( TFile.ReadAllText(.... lese ich die Json-Datei in meine Json-Objektvariable ein.
Danach weise ich meinen Klassen-Feldern die Werte über JsonDatabaseParam.DatenbankName := my_jsonObj.GetValue<string>(... zu.

Wie kann ich nun die Werte meiner Klassen-Felder in eine Json-Datei schreiben?

Vielen Dank im Voraus und schöne Weihnachten!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 25. Dez 2022, 11:39
Wenn du es einfach und bequem haben willst, dann würde ich dir die Neon-Library empfehlen.

https://blogs.embarcadero.com/effici...-neon-library/

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 ...
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 25. Dez 2022, 17:25
Zitat:
..dann würde ich dir die Neon-Library empfehlen...
Vielen Dank! Genau sowas habe ich mir vorgestellt. Habe inzw. auch noch SuperObject entdeckt.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 26. Dez 2022, 08:55
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.)
The angels have the phone box.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
662 Beiträge
 
#5

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 26. Dez 2022, 11:14
Hier kann man auch online aus JSON eine Delphi-Klasse machen:

https://jsontodelphi.com/
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
652 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 28. Dez 2022, 11:33
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:
  TFile.WriteAllText(TJson.ObjectToJsonString(my_jsonObj)); 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.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wie kann man Klassen-Felder in eine Json-Datei speichern

  Alt 28. Dez 2022, 13:23
@Bbommel,

danke für den Hinweis , ich hatte das auch schon gesehen. HAbe mich momentan (vorläufig) auf TJsonTextWriter und TStringWriter 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.
Delphi-Quellcode:
...
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;
...
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.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  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 06:19 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