![]() |
JSONObj := TJson.ObjectToJsonObject(myObj)
Hallo,
irgendwie komme ich hier nicht weiter. Ich möchte ein Json File in mein Object wandeln und zurück. Das Json File:
Code:
mein Object:
{
"stay": { "checkIn": "2019-03-15", "checkOut": "2019-03-16" }, "destination": { "code": "PMI" }, "occupancies": [{ "rooms": "1", "adults": "2", "children": "0" }] }
Delphi-Quellcode:
das Array wird aber nicht in Json umgesetzt. Ich habe den Verdacht dass das Array in meinem Object falsch ist. Hat jemand eine Idee?
uses REST.Json, System.Json;
interface Tstay = class(TObject) private FcheckIn: String; FcheckOut: String; public property checkIn : String read FcheckIn write FcheckIn; property checkOut : String read FcheckOut write FcheckOut; end; Tdestination = class private Fcode: String; public property code : String read Fcode write Fcode; end; TByDest = class(TObject) private Fstay: Tstay; Fdestination: Tdestination; function Getoccupancies(const Name: string): string; procedure Setoccupancies(const Name, Value: string); public constructor Create; destructor Destroy; property stay : Tstay read Fstay write Fstay; property destination : Tdestination read Fdestination write Fdestination; property occupancies[const Name: string] : string read Getoccupancies write Setoccupancies; end; var Data : TStringList; implementation constructor TByDest.Create; begin inherited; self.stay := Tstay.Create; self.destination := Tdestination.Create; Data := TStringList.Create; end; destructor TByDest.Destroy; begin stay.Free; destination.Free; Data.Free; inherited; end; function TByDest.Getoccupancies(const Name: string): string; begin Result := Data.Values[Name]; end; procedure TByDest.Setoccupancies(const Name, Value: string); begin Data.Add(Name+'='+Value); end; Mein Test Aufruf: procedure TMainForm.Button2Click(Sender: TObject); var myObj: TByDest; JSONObj: TJsonObject; begin myObj:= TByDest.Create; JSONObj := TJson.ObjectToJsonObject(myObj); Memo1.Lines.Add(TJson.Format(JSONObj)); end; |
AW: JSONObj := TJson.ObjectToJsonObject(myObj)
Na ja, es fehlt halt an FOccupancies. Da kann dann natürlich kein Array gebildet werden.
Sowas würde ich aber nicht mit der Hand machen, nutze den praktischen Json To Delphi Class Generator von Petar Georgiev.
Delphi-Quellcode:
unit RootUnit;
// ************************************************* // Generated By: JsonToDelphiClass - 0.65 // Project link: https://github.com/PKGeorgiev/Delphi-JsonToDelphiClass // Generated On: 2018-04-23 11:08:41 // ************************************************* // Created By : Petar Georgiev - 2014 // WebSite : http://pgeorgiev.com // ************************************************* interface uses Generics.Collections, Rest.Json; type TOccupanciesClass = class private FAdults: String; FChildren: String; FRooms: String; public property adults: String read FAdults write FAdults; property children: String read FChildren write FChildren; property rooms: String read FRooms write FRooms; function ToJsonString: string; class function FromJsonString(AJsonString: string): TOccupanciesClass; end; TDestinationClass = class private FCode: String; public property code: String read FCode write FCode; function ToJsonString: string; class function FromJsonString(AJsonString: string): TDestinationClass; end; TStayClass = class private FCheckIn: TDate; FCheckOut: TDate; public property checkIn: TDate read FCheckIn write FCheckIn; property checkOut: TDate read FCheckOut write FCheckOut; function ToJsonString: string; class function FromJsonString(AJsonString: string): TStayClass; end; TRootClass = class private FDestination: TDestinationClass; FOccupancies: TArray<TOccupanciesClass>; FStay: TStayClass; public property destination: TDestinationClass read FDestination write FDestination; property occupancies: TArray<TOccupanciesClass> read FOccupancies write FOccupancies; property stay: TStayClass read FStay write FStay; constructor Create; destructor Destroy; override; function ToJsonString: string; class function FromJsonString(AJsonString: string): TRootClass; end; implementation {TOccupanciesClass} function TOccupanciesClass.ToJsonString: string; begin result := TJson.ObjectToJsonString(self); end; class function TOccupanciesClass.FromJsonString(AJsonString: string): TOccupanciesClass; begin result := TJson.JsonToObject<TOccupanciesClass>(AJsonString) end; {TDestinationClass} function TDestinationClass.ToJsonString: string; begin result := TJson.ObjectToJsonString(self); end; class function TDestinationClass.FromJsonString(AJsonString: string): TDestinationClass; begin result := TJson.JsonToObject<TDestinationClass>(AJsonString) end; {TStayClass} function TStayClass.ToJsonString: string; begin result := TJson.ObjectToJsonString(self); end; class function TStayClass.FromJsonString(AJsonString: string): TStayClass; begin result := TJson.JsonToObject<TStayClass>(AJsonString) end; {TRootClass} constructor TRootClass.Create; begin inherited; FStay := TStayClass.Create(); FDestination := TDestinationClass.Create(); end; destructor TRootClass.Destroy; var LoccupanciesItem: TOccupanciesClass; begin for LoccupanciesItem in FOccupancies do LoccupanciesItem.free; FStay.free; FDestination.free; inherited; end; function TRootClass.ToJsonString: string; begin result := TJson.ObjectToJsonString(self); end; class function TRootClass.FromJsonString(AJsonString: string): TRootClass; begin result := TJson.JsonToObject<TRootClass>(AJsonString) end; end. |
AW: JSONObj := TJson.ObjectToJsonObject(myObj)
Erwartest du wirklich dass das Programm deine globale Variable auswertet und umsetzt? Wenn du ein Objekt
Delphi-Quellcode:
willst, dann pack die Daten für das Objekt in das Objekt.
serialisieren
|
AW: JSONObj := TJson.ObjectToJsonObject(myObj)
Wow. Das ist ja perfekt.
@TiGü - so etwas habe ich gesucht. Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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