diff --git a/Examples/delphi/JSONBr_Exemplo.dpr b/Examples/delphi/JSONBr_Exemplo.dpr index 3dec4c0..eee808d 100644 --- a/Examples/delphi/JSONBr_Exemplo.dpr +++ b/Examples/delphi/JSONBr_Exemplo.dpr @@ -4,9 +4,11 @@ uses Vcl.Forms, PUnit in 'PUnit.pas' {Form1}, model.person in 'model.person.pas', - jsonbr.builders in '..\Source\Core\jsonbr.builders.pas', - jsonbr in '..\Source\Core\jsonbr.pas', - jsonbr.writer in '..\Source\Core\jsonbr.writer.pas'; + jsonbr in '..\..\Source\jsonbr.pas', + jsonbr.builders in '..\..\Source\Core\jsonbr.builders.pas', + jsonbr.reader in '..\..\Source\Core\jsonbr.reader.pas', + jsonbr.utils in '..\..\Source\Core\jsonbr.utils.pas', + jsonbr.writer in '..\..\Source\Core\jsonbr.writer.pas'; {$R *.res} diff --git a/Examples/delphi/JSONBr_Exemplo.dproj b/Examples/delphi/JSONBr_Exemplo.dproj index 47faafa..32974d2 100644 --- a/Examples/delphi/JSONBr_Exemplo.dproj +++ b/Examples/delphi/JSONBr_Exemplo.dproj @@ -1,7 +1,7 @@  {F9523C56-F9AE-4A0C-8057-C72B0563C0D7} - 19.0 + 20.1 VCL True Debug @@ -67,6 +67,7 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 $(BDS)\bin\default_app.manifest + none DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;ZComponent;vclactnband;ZCore;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;ZParseSql;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;ZDbc;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;ZPlain;DBXInformixDriver;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage) @@ -81,8 +82,9 @@ false - true PerMonitorV2 + true + 1033 false @@ -103,13 +105,11 @@ dfm - - - - - Cfg_2 - Base - + + + + + Base @@ -117,6 +117,10 @@ Cfg_1 Base + + Cfg_2 + Base + Delphi.Personality.12 @@ -126,12 +130,16 @@ JSONBr_Exemplo.dpr + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + True False - + JSONBr_Exemplo.exe @@ -150,14 +158,14 @@ 0 - + classes - 1 + 64 classes - 1 + 64 @@ -170,12 +178,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -228,6 +230,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -248,6 +260,66 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -258,6 +330,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -278,6 +360,16 @@ 1 + + + res\drawable-xxxhdpi + 1 + + + res\drawable-xxxhdpi + 1 + + res\drawable-ldpi @@ -418,6 +510,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -441,6 +583,11 @@ 1 .framework + + Contents\MacOS + 1 + .framework + 0 @@ -454,7 +601,7 @@ 1 .dylib - + 1 .dylib @@ -468,6 +615,11 @@ 1 .dylib + + Contents\MacOS + 1 + .dylib + 0 .dll;.bpl @@ -482,7 +634,7 @@ 1 .dylib - + 1 .dylib @@ -496,6 +648,11 @@ 1 .dylib + + Contents\MacOS + 1 + .dylib + 0 .bpl @@ -514,7 +671,7 @@ 0 - + 0 @@ -525,93 +682,136 @@ Contents\Resources\StartUp\ 0 + + Contents\Resources\StartUp\ + 0 + 0 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + + ..\ 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + ..\ 1 - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + ..\ 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + + + Contents 1 - - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + Contents 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + Contents 1 - - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + + Contents\Resources 1 - - ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + + Contents\Resources + 1 + + + Contents\Resources 1 - + + library\lib\armeabi-v7a 1 + library\lib\arm64-v8a 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 + + 1 + + + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + Contents\MacOS + 1 + + + 0 + - + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF 1 @@ -624,6 +824,10 @@ ..\ 1 + + ..\ + 1 + @@ -632,7 +836,7 @@ 1 - + 1 @@ -641,7 +845,7 @@ ..\$(PROJECTNAME).launchscreen 64 - + ..\$(PROJECTNAME).launchscreen 64 @@ -653,123 +857,242 @@ 1 - + 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + + + Assets + 1 + + + Assets 1 - - - ..\ + + + Assets 1 - - ..\ + + Assets 1 - - - Contents + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Contents + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Contents\Resources + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Contents\Resources + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - library\lib\armeabi-v7a + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - library\lib\arm64-v8a + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Contents\MacOS + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Contents\MacOS + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - 0 + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 - - - library\lib\armeabi-v7a + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Assets + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - Assets + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset 1 - - - Assets + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - - Assets + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset 1 - - + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\LaunchScreenImage.imageset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset + 1 + + + + + + + - - - - + + + 12 diff --git a/Examples/delphi/JSONBr_Exemplo.res b/Examples/delphi/JSONBr_Exemplo.res index 0d5e0d3..6d5920c 100644 Binary files a/Examples/delphi/JSONBr_Exemplo.res and b/Examples/delphi/JSONBr_Exemplo.res differ diff --git a/Examples/delphi/PUnit.dfm b/Examples/delphi/PUnit.dfm index 4ac7ebd..366b773 100644 --- a/Examples/delphi/PUnit.dfm +++ b/Examples/delphi/PUnit.dfm @@ -2,30 +2,28 @@ object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' - ClientHeight = 299 - ClientWidth = 635 + ClientHeight = 506 + ClientWidth = 705 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] - OldCreateOrder = False Position = poDesktopCenter - PixelsPerInch = 96 TextHeight = 13 object Memo1: TMemo - Left = 66 - Top = 30 - Width = 499 - Height = 166 + Left = 8 + Top = 8 + Width = 681 + Height = 459 Lines.Strings = ( 'Memo1') TabOrder = 0 end object Button1: TButton - Left = 66 - Top = 222 + Left = 8 + Top = 473 Width = 118 Height = 25 Caption = 'Funcional' @@ -33,12 +31,21 @@ object Form1: TForm1 OnClick = Button1Click end object Button2: TButton - Left = 462 - Top = 222 + Left = 190 + Top = 473 Width = 99 Height = 25 Caption = 'ObjectToJSON' TabOrder = 2 OnClick = Button2Click end + object Button3: TButton + Left = 352 + Top = 473 + Width = 121 + Height = 25 + Caption = 'JsonToObject' + TabOrder = 3 + OnClick = Button3Click + end end diff --git a/Examples/delphi/PUnit.pas b/Examples/delphi/PUnit.pas index 4ff199f..b806eed 100644 --- a/Examples/delphi/PUnit.pas +++ b/Examples/delphi/PUnit.pas @@ -22,8 +22,10 @@ TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; + Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); private { Private declarations } public @@ -36,6 +38,9 @@ TForm1 = class(TForm) implementation uses + Rest.Json, + System.JSON, + System.DateUtils, model.person; {$R *.dfm} @@ -78,7 +83,8 @@ procedure TForm1.Button2Click(Sender: TObject); Person.LastName := 'Json'; Person.Age := 10; Person.Salary := 100.10; - Person.Date := Now; + Person.Date := Now.GetDate; + Person.DateTime := Now; Person.Pessoa.Id := 2; Person.Pessoa.FirstName := 'Json 2'; @@ -106,8 +112,32 @@ procedure TForm1.Button2Click(Sender: TObject); TJSONBr.OnSetValue := nil; // Criando seu proprio tratamento TJSONBr.OnGetValue := nil; // Criando seu proprio tratamento - Memo1.Lines.Text := TJSONBr.ObjectToJsonString(Person); + var JV: TJSONValue; // not TJSONObject + JV := nil; + try + try + JV := TJSONObject.ParseJSONValue(TJSONBr.ObjectToJsonString(Person)); + Memo1.Lines.Text := JV.Format(4); + except on E: Exception do + ShowMessage(E.Message); + end; + finally + FreeAndNil(JV); + end; + + finally + Person.Free; + end; +end; + +procedure TForm1.Button3Click(Sender: TObject); +var + Person: TPerson; +begin + Person := TJsonBr.JsonToObject(Memo1.Lines.Text); + try + Memo1.Lines.Add(Person.FirstName); finally Person.Free; end; diff --git a/Examples/delphi/model.person.pas b/Examples/delphi/model.person.pas index 1e0cbef..b8b3cdf 100644 --- a/Examples/delphi/model.person.pas +++ b/Examples/delphi/model.person.pas @@ -44,10 +44,11 @@ TPerson = class FLastName: string; FAge: Integer; FSalary: Double; - FDate: TDateTime; + FDate: TDate; FPessoa: TPersonSub; FPessoas: TObjectList; FBlob: String; + FDateTime: TDateTime; public { Public declarations } constructor Create; @@ -78,9 +79,14 @@ TPerson = class property Salary: Double read FSalary write FSalary; [Restrictions([NotNull])] - [Column('Date', ftDateTime)] + [Column('Date', ftDate)] [Dictionary('Nivel','Data de aniversário','Date','','',taRightJustify)] - property Date: TDateTime read FDate write FDate; + property Date: TDate read FDate write FDate; + + [Restrictions([NotNull])] + [Column('DateTime', ftDateTime)] + [Dictionary('Nivel','Data de aniversário','Date','','',taRightJustify)] + property DateTime: TDateTime read FDateTime write FDateTime; [Column('Imagem', ftBlob)] property Imagem: string read FBlob write FBlob; diff --git a/Source/Core/jsonbr.utils.pas b/Source/Core/jsonbr.utils.pas index fa89d66..0635ec5 100644 --- a/Source/Core/jsonbr.utils.pas +++ b/Source/Core/jsonbr.utils.pas @@ -4,7 +4,8 @@ interface uses StrUtils, - SysUtils; + SysUtils, + System.DateUtils; function DateTimeToIso8601(const AValue: TDateTime; const AUseISO8601DateFormat: Boolean): string; @@ -43,8 +44,13 @@ function Iso8601ToDateTime(const AValue: string; LYYYY, LMM, LDD, LHH, LMI, LSS: Cardinal; begin if AUseISO8601DateFormat then - Result := StrToDateTimeDef(AValue, 0) - else + begin + try + Result := System.DateUtils.ISO8601ToDate(AValue); + except + Result := 0; + end; + end else Result := StrToDateTimeDef(AValue, 0, JsonBrFormatSettings); if Length(AValue) = 19 then