尝试使用 REST.Json 将 json 转换为对象时出现 EConvert 异常无效日期时间
EConvert exception invalid date time when trying to convert json to object using REST.Json
以下代码以异常结束
'2019.10.5 14:16:14,1000' is not a valid date and time
尝试将 json 解析为对象时。问题似乎是日期中的小数点。
JSonStr := '{"orderNumber": "395409772020_1", "modified": "2019-10-05T14:16:14.9995946Z"}';
Order := TJson.JsonToObject<TOrder>(JSonStr);
如果我使用向下舍入的毫秒精度日期,即 "modified": "2019-10-05T14:16:14.4995946Z"
它工作正常。
我尝试添加选项来设置日期格式。 Order := TJson.JsonToObject<TOrder>(JSonStr, [joDateFormatParse]);
。这可以防止代码崩溃,但无法识别 DateTime 并且该值以“0”结尾。
无论如何,这只是库中的一个错误?
我是 运行 Delphi 10.2 更新 3
我用你的代码构建了一个简单的演示程序,它与 Delphi 10.4.1 完美配合。
这里是演示的源代码:
unit JsonParseDateDemoMain;
interface
uses
Winapi.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
REST.Json;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
end;
type
TOrder = class
private
FOrderNumber : String;
FModified : TDateTime;
published
property OrderNumber : String read FOrderNumber write FOrderNumber;
property Modified : TDateTime read FModified write FModified;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
JsonStr : String;
Order : TOrder;
begin
JsonStr := '{"orderNumber": "395409772020_1", ' +
'"modified": "2019-10-05T14:16:14.9995946Z"}';
Order := TJson.JsonToObject<TOrder>(JsonStr);
Memo1.Lines.Add(Order.OrderNumber);
Memo1.Lines.Add(DateTimeToStr(Order.Modified));
Order.Free;
end;
end.
这是您使用的 Delphi 版本中的错误。
以下代码以异常结束
'2019.10.5 14:16:14,1000' is not a valid date and time
尝试将 json 解析为对象时。问题似乎是日期中的小数点。
JSonStr := '{"orderNumber": "395409772020_1", "modified": "2019-10-05T14:16:14.9995946Z"}';
Order := TJson.JsonToObject<TOrder>(JSonStr);
如果我使用向下舍入的毫秒精度日期,即 "modified": "2019-10-05T14:16:14.4995946Z"
它工作正常。
我尝试添加选项来设置日期格式。 Order := TJson.JsonToObject<TOrder>(JSonStr, [joDateFormatParse]);
。这可以防止代码崩溃,但无法识别 DateTime 并且该值以“0”结尾。
无论如何,这只是库中的一个错误? 我是 运行 Delphi 10.2 更新 3
我用你的代码构建了一个简单的演示程序,它与 Delphi 10.4.1 完美配合。
这里是演示的源代码:
unit JsonParseDateDemoMain;
interface
uses
Winapi.Windows, Winapi.Messages,
System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
REST.Json;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
end;
type
TOrder = class
private
FOrderNumber : String;
FModified : TDateTime;
published
property OrderNumber : String read FOrderNumber write FOrderNumber;
property Modified : TDateTime read FModified write FModified;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
JsonStr : String;
Order : TOrder;
begin
JsonStr := '{"orderNumber": "395409772020_1", ' +
'"modified": "2019-10-05T14:16:14.9995946Z"}';
Order := TJson.JsonToObject<TOrder>(JsonStr);
Memo1.Lines.Add(Order.OrderNumber);
Memo1.Lines.Add(DateTimeToStr(Order.Modified));
Order.Free;
end;
end.
这是您使用的 Delphi 版本中的错误。