Javascript 如何在JSON或Coldfusion中处理JSON结果中的“00”
我不知道该怎么说,所以我会直接说 我使用Jquery和ajax在另一个选择框更改时更新选择框。除了JSON返回时激发fail方法而不是done方法之外,所有操作都是根据JSON进行的 查看所有内容后,我确定返回的JSON无效 JSON是Javascript 如何在JSON或Coldfusion中处理JSON结果中的“00”,javascript,jquery,ajax,json,coldfusion-10,Javascript,Jquery,Ajax,Json,Coldfusion 10,我不知道该怎么说,所以我会直接说 我使用Jquery和ajax在另一个选择框更改时更新选择框。除了JSON返回时激发fail方法而不是done方法之外,所有操作都是根据JSON进行的 查看所有内容后,我确定返回的JSON无效 JSON是 { "COLUMNS": ["DESCRIPTION", "COMPUTED_COLUMN_2"], "DATA": [ ["Test; Job PD", 11], ["Test 2", 10],
{
"COLUMNS": ["DESCRIPTION", "COMPUTED_COLUMN_2"],
"DATA": [
["Test; Job PD", 11],
["Test 2", 10],
["Test 3", 00],
["Test 4", 20]
]
}
测试3的值为00。这实际上应该是字符串“00”。然而,在ColdFusion中序列化JSON的解析器似乎返回00作为一个数字。这会导致JSON转换失败并激发fail方法。这只发生在iOS和Mac上
我的问题是,我如何强制JSON中的值为字符串值而不是数字值
我的环境是:
OSX小牛队
铬
ColdFusion 10
CFWheels 1.1.8从技术上讲,00作为JSON中的数字是无效的-请在此处的数字下进行检查: 正如meagar在上面的评论中所写,您需要将其编码为字符串
您还可以将其编码为0,因为这是整数值,并在解析数据时考虑特殊情况。我在数据过滤器中使用js regex replace替换特殊情况
response.replace(/(00)/, '"00"');
引号很重要,因为如果您只是替换00,它会将其重新序列化为一个数字
更新:
此问题在ColdFusion update 11中由Adobe解决。非常感谢@Miguel-F指出这一点。用引号括起来。您不能告诉JSON将值视为字符串,您必须实际修改JSON,使其成为字符串,通常在您编码数据时,使值为字符串。查询在计算列2中的数据类型是什么?我不明白为什么SerializeJSON会为实际的0输出00。除了00,其余的都可以使用。00被认为是0,最好按照@meager的想法。将字符串转换回整数很容易。如果它是字符串,则需要将其设置为字符串!我假设这是来自数据库,因为他的序列化对象与coldfusion查询的格式相同。考虑到这一点,简单地将数字转换为字符串可能就不那么简单了。在railo中,如果00当前是一个数字,则通过将00转换为0来处理此问题。如果使用sql将它们全部转换为字符串,则可以将其保留为字符串。但我希望它在sql中已经是一个字符串,因为它是00。不幸的是,我要求值作为字符串而不是数字。我在CF10中使用SerializeJSON生成JSON,因此我对编码没有任何控制权。您是否更新并验证它是否适合您?只是好奇,因为我并不总是相信他们的bug状态。