AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JSONObj := TJson.ObjectToJsonObject(myObj)

Ein Thema von Edelfix · begonnen am 23. Apr 2018 · letzter Beitrag vom 23. Apr 2018
Antwort Antwort
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#1

JSONObj := TJson.ObjectToJsonObject(myObj)

  Alt 23. Apr 2018, 10:48
Hallo,

irgendwie komme ich hier nicht weiter.

Ich möchte ein Json File in mein Object wandeln und zurück.

Das Json File:
Code:
{
   "stay": {
      "checkIn": "2019-03-15",
      "checkOut": "2019-03-16"
   },
   "destination": {
      "code": "PMI"
   },
   "occupancies": [{
      "rooms": "1",
      "adults": "2",
      "children": "0"
   }]   
}
mein Object:

Delphi-Quellcode:
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;
das Array wird aber nicht in Json umgesetzt. Ich habe den Verdacht dass das Array in meinem Object falsch ist. Hat jemand eine Idee?
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: JSONObj := TJson.ObjectToJsonObject(myObj)

  Alt 23. Apr 2018, 11:12
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: JSONObj := TJson.ObjectToJsonObject(myObj)

  Alt 23. Apr 2018, 11:20
Erwartest du wirklich dass das Programm deine globale Variable auswertet und umsetzt? Wenn du ein Objekt serialisieren willst, dann pack die Daten für das Objekt in das Objekt.
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
214 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: JSONObj := TJson.ObjectToJsonObject(myObj)

  Alt 23. Apr 2018, 13:02
Wow. Das ist ja perfekt.

@TiGü - so etwas habe ich gesucht.

Vielen Dank!
  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 21:31 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