Coldfusion SerializeJSON和deSerializeJSON将字符串转换为数字

时间:2014-11-19 10:54:33

标签: coldfusion coldfusion-9

ColdFusion在通过SerializeJSON和deSerializeJSON传递给JS时将字符串转换为数字。

只有在两组数字之间使用'E'时才会发生这种情况。像3E6,65E3,56e45等。这是cfscript中的代码。

x = "2e9";
writedump(SerializeJSON(x));
writedump(deSerializeJSON(SerializeJSON(x)));

Output:
2.0E9 2000000000 

请提出建议,如果有其他方法可以解决此类问题。

2 个答案:

答案 0 :(得分:8)

就是这样:https://bugbase.adobe.com/index.cfm?event=bug&id=3695627:" SerializeJSON将看起来像科学记数法的字符串变成浮点数。"

它是CF9中的已知错误,已在CF10中修复。

与此同时,你只需要用字符串填充字符串,迫使ColdFusion不要将其视为科学记数法中的数字。

或者升级到CF10(CF9下个月寿命结束,顺便说一下)。或者到Railo。

答案 1 :(得分:0)

我已使用以下解决方案解决了此问题

假设ItemUnit = 12E45

stcReturn.firstname = "Yes";
stcReturn.lastname = "Man";
stcReturn.ItemUnit = "12E45"

deSerializeJSON stcReturn.ItemUnit = 12e + 46后输出错误

<cfset stcReturn.ItemUnit  = ItemUnit />    
<cfset StructSetMetaData(stcReturn.ItemUnit, {ItemUnit : 
{"type":"string","name":"ItemUnit"}})/>

deSerializeJSON(stcReturn)

正确的输出:12E45