编辑 3 对于 Coldfusion 9.0 存在以下问题,更新到 9.0.1 确实解决了这个问题
我有一个使用 SerializeJSON 对查询结果进行编码的应用程序:
#SerializeJSON('Ok works fine')#
不幸的是,它修剪了数字的尾随零:
#SerializeJSON(12345.50)#
手动如果我要将相同的值设为字符串,则会发生同样的事情
#SerializeJSON('12345.50')#
我怎样才能防止这种情况发生?
编辑 - 我的场景细节
数据库 (Oracle) 将这些示例值存储在一行中
当我使用 Coldfusion 9.0.1 (cfscript 如果重要) 查询时,这是一个 RC 转储,请注意 id 字符串保留前导零,但数字列已删除尾随零。
虽然这很有趣,但对于原始问题并不重要,因为我可以手动创建查询以保留像下面这样的尾随零,但它仍然会在 serializeJSON 中丢失
我获取查询结果,并使用 serializeJSON 对值进行编码。 JSON 由 jquery 数据表 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""
},
最佳答案
摘自评论
这个问题的原始海报 (OP) 最初报告说他们在 ColdFusion 9.0.1 中遇到了这个问题。事实证明,他们实际上运行的是 ColdFusion 9.0.0。这很重要,因为 Adobe 在 9.0.1 版本中对 SerializeJSON()
函数处理数字的方式进行了更改。当服务器升级到版本 9.0.1 时,这些问题得到解决。
Raymond Camden 的这篇博文讨论了 9.0.1 中所做的更改 - Not happy with the CF901 JSON Changes?
在该博客文章中,他引用了错误 83638,该错误已在 9.0.1 版的 HotFix 1 中输入并修复 - Cumulative Hotfix 1 (CHF1) for ColdFusion 9.0.1
如果您在 BugBase 中搜索版本 9.0.1 下的 JSON,则有几个报告与 OP 相同的问题。
那些报告的错误还提到了 OP 最初没有报告的另一个问题,即 .0
也被附加到整数。后来在讨论中,OP 确认他们也看到了这种行为。这导致他们验证正在使用的 ColdFusion 版本,发现它不是 9.0.1。
关于json - 如何确保 SerializeJSON 保持尾随/前导零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16679118/