编辑 3 Coldfusion 9.0 存在以下问题,更新到 9.0.1 确实解决了这个问题
我有一个使用 SerializeJSON 对查询结果进行编码的应用程序:
#SerializeJSON('Ok works fine')#
不幸的是,它会从数字中修剪尾随零:
#SerializeJSON(12345.50)#
如果我要手动将相同的值设为字符串,则会发生同样的事情
#SerializeJSON('12345.50')#
我怎样才能防止这种情况发生?
编辑- 我的场景细节
数据库 (Oracle) 将这些示例值存储在一行中
- benefactor_id : 0000729789 varchar2(10)
- life_gift_credit_amt:12345.50 号码(14,2)
当我使用 Coldfusion 9.0.1 (cfscript if it matter) 查询时,这是一个 RC 转储,请注意 id 字符串保留前导零,但数字列已删除尾随零。 虽然这很有趣,但这与原始问题无关,因为我可以手动创建一个查询来保留下面的尾随零,它仍然会在 serializeJSON 中丢失
我获取查询结果,并使用 serializeJSON 对值进行编码。JSON 由 jquery Datatables ajax 使用。请注意,id 字符串已变为数字,并添加了 Miguel-F 提到的“.0”
<cfscript>
...
rc.sql = q.setsql;
rc.qResult = q.execute().getresult();
savecontent variable="rc.aaData" {
for (i=1; i <= rc.qResult.RecordCount; i++) {
writeOutput('{');
for (col=1; col <= iColumnsLen; col++) {
// the following line contains a conditional specific to this example
writeOutput('"#aColumns[col]#":#SerializeJSON(rc.qResult[aColumns[col]][i])#');
//former statement, discarded due to not being able to handle apostrophe's ... writeOutput('"#jsStringFormat(rc.qResult[aColumns[col]][i])#"');
writeOutput((col NEQ iColumnsLen) ? ',' : '');
}
writeOutput('}');
writeOutput((i NEQ rc.qResult.RecordCount) ? ',' : '');
}
};
</cfscript>
我最初使用的是 jsStringFormat 而不是 serializeJSON,但是由于评论文本区域包含撇号的 ect,这将返回无效的 JSON
{
"sEcho": 1,
"iTotalRecords": 65970,
"iTotalDisplayRecords": 7657,
"aaData": [
{
"nd_event_id": 525,
"benefactor_id": 729789.0,
"seq_number": 182163,
"life_gift_credit_amt": 12345.5,
"qty_requested": 2,
"b_a_comment": "#swap",
"pref_mail_name": "Jay P. Rizzi"
}
]
}
编辑 2
一个快速的旁注,如果我将我的序列化行更改为
writeOutput('"#aColumns[col]#": "#SerializeJSON(rc.qResult[aColumns[col]][i])#"');
然后我的结果集更改为将记录放在双引号中,但也将双引号字符串放在双引号中,同时仍删除尾随零;它让我相信 serializeJSON 将值转换为类型?
"aaData": [
{
"nd_event_id": "525",
"benefactor_id": "729789.0",
"seq_number": "182163",
"life_gift_credit_amt": "12345.5",
"qty_requested": "2",
"b_a_comment": ""#swap"",
"pref_mail_name": ""JayP.Rizzi""
},