当值为整数时无法将小数部分显示为 .0
Can't show fractional part as .0 when value is a whole number
案例如下:
uses
System.JSON;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
dd:Double;
aJsonObj:TJSONObject;
begin
dd := 100.0;
aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue',TJSONNumber.Create(dd)));
ShowMessage(aJsonObj.ToString);
end;
显示
{"DecimalValue":100}
我需要的是
{"DecimalValue":100.0}
我试过更改 JsonFormatSettings
但找不到添加小数部分的方法。
其中一个 TJSONNumber
constructors 接受原始字符串值,该值将用于结果 JSON 字符串,无需进一步处理。它允许您 pre-format 自己的价值:
procedure TForm1.Button1Click(Sender: TObject);
var
dd: Double;
aJsonObj: TJSONObject;
begin
dd := 100.0;
aJsonObj := TJSONObject.Create(
TJSONPair.Create('DecimalValue', TJSONNumber.Create(FormatFloat('0.0###', dd, GetJSONFormat))));
try
ShowMessage(aJsonObj.ToString);
finally
aJsonObj.Free;
end;
end;
使用上面的代码片段,值显示为:
{"DecimalValue":100.0}
您甚至可以创建 'whatever'
作为数字:
aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue', TJSONNumber.Create('whatever')));
得到这个(无效)JSON:
{"DecimalValue":whatever}
旁注:您有责任释放您创建的根 JSON 对象,因为它们没有父对象来管理它们的生命周期。正如您在第一个代码片段中所见,使用 try..finally
到 Free
根对象。太糟糕了,the documentation 本身会诱使您不进行清理。
案例如下:
uses
System.JSON;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
dd:Double;
aJsonObj:TJSONObject;
begin
dd := 100.0;
aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue',TJSONNumber.Create(dd)));
ShowMessage(aJsonObj.ToString);
end;
显示
{"DecimalValue":100}
我需要的是
{"DecimalValue":100.0}
我试过更改 JsonFormatSettings
但找不到添加小数部分的方法。
其中一个 TJSONNumber
constructors 接受原始字符串值,该值将用于结果 JSON 字符串,无需进一步处理。它允许您 pre-format 自己的价值:
procedure TForm1.Button1Click(Sender: TObject);
var
dd: Double;
aJsonObj: TJSONObject;
begin
dd := 100.0;
aJsonObj := TJSONObject.Create(
TJSONPair.Create('DecimalValue', TJSONNumber.Create(FormatFloat('0.0###', dd, GetJSONFormat))));
try
ShowMessage(aJsonObj.ToString);
finally
aJsonObj.Free;
end;
end;
使用上面的代码片段,值显示为:
{"DecimalValue":100.0}
您甚至可以创建 'whatever'
作为数字:
aJsonObj := TJSONObject.Create(TJSONPair.Create('DecimalValue', TJSONNumber.Create('whatever')));
得到这个(无效)JSON:
{"DecimalValue":whatever}
旁注:您有责任释放您创建的根 JSON 对象,因为它们没有父对象来管理它们的生命周期。正如您在第一个代码片段中所见,使用 try..finally
到 Free
根对象。太糟糕了,the documentation 本身会诱使您不进行清理。