json - 当值为整数时,不能将小数部分显示为 .0
问题描述
情况如下:
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
构造函数接受一个原始字符串值,该值将在生成的 JSON 字符串中使用,无需进一步处理。它允许您自己预先格式化值:
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
太糟糕了,文档本身会诱使您不进行清理。
推荐阅读
- datetime - 是否有涵盖指定日期时间格式的 YY-MM-DD 方式的 ISO 或标准化
- php - 需要有关使用 PHP 类 (PHP 5.6) 导入/别名的帮助
- javascript - 打字稿中的数字精度
- python - 使用用户输入使用 python 创建 MDR 文件
- maps - HERE API - 自动完成问题
- angular - 具有复杂标签的延迟加载选项卡
- google-maps - Google 的地理编码 API 是否会生成任何质量代码,例如 Mapquest API 会为地址生成质量代码?
- javascript - 无法使用php和ajax在页面上显示json数据
- excel - 实现宏中重复代码的子程序
- git-branch - 如何将每个过去的提交放在自己的单独分支上?