ColdFusion 10 serializeJSON将是/否字符串转换为布尔值 - 如何阻止它?

时间:2014-08-07 14:48:21

标签: sql-server json coldfusion wsdl coldfusion-10

我有一个存储过程,MS SQL Server,其中一个返回的列是一个字符串,“是”或“否”。到现在为止还挺好。我正在ColdFusion 10中创建一个JSON字符串,并最终将其踢到jQuery / Bootstrap以放入表中。如果我在SP的输出上调用writeOutput("SP suitable text: " & spResults.rg_suitable_text[i]);,(这是一个计算值,而不是TSQL中具有实际数据类型的实际列),它会写出它应该是什么,即是或否。但是,在构造要序列化为JSON的数组rg_suitable_text=spResults.rg_suitable_text[i]等等时,如果我使用REST客户端用于Google或Firefox并仅查看ColdFusion的原始JSON输出,则显示true / false。我甚至尝试创建一个新变量和硬编码:

var solicit="No";
if(spResults.rg_suitable_text[i] EQ true OR trim(spResults.rg_suitable_text[i]) EQ "true")
{
    solicit="Yes";
}

并将其标记到我的数组中,但同样的事情发生了。看起来ColdFusion 11支持一种解决方法,但这是一个工作项目,所以这不是一个选项。是否有一个我可以对上面的块进行的编辑,可以说,“ColdFusion 10,我不在乎你想要什么,这是一个字符串,并把它当成一个爆炸的字符串,dangit!”

3 个答案:

答案 0 :(得分:3)

要回答您的底线问题(帖子的最后一句),答案是:

你可以搞乱数据,以欺骗ColdFusion认为它不是一个布尔字符串,但这不是一个很好的方法。

你基本上需要使用ColdFusion以外的东西来创建你的JSON字符串。 ColdFusion充斥着JSON错误,几乎要求它的JSON产品不适合用途。我认为发现的大多数已经在CF11中得到修复,正如您所注意到的那样。

我没有在产品中使用它,但是我使用Google's GSON API从CFML数据中构建JSON,获得了合理的概念验证成功。

答案 1 :(得分:3)

github上的

JsonSerializer.cfc可以处理你的"这是一个字符串,把它当成一个爆炸的字符串,dangit!"请求。

http://www.bennadel.com/blog/2505-jsonserializer-cfc-a-data-serialization-utility-for-coldfusion.htm

示例代码:

serializer = new lib.JsonSerializer()
    .asInteger( "age" )
    .asAny( "createdAt" )
    .asDate( "dateOfBirth" )
    .asString( "favoriteColor" )
    .asInteger( "favoriteNumbers" )
    .asString( "firstName" )
    .asString( "lastName" )
    .asString( "nickName" )
    .exclude( "password" );

tricia = {
    FIRSTNAME = "Tricia",
    LASTNAME = "Smith",
    DATEOFBIRTH = dateConvert( "local2utc", "1975/01/01" ),
    NICKNAME = "Trish",
    FAVORITECOLOR = "333333",
    FAVORITENUMBERS = [ true, 4.0, 137, false ],
    AGE = 38,
    CREATEDAT = now(),
    PASSWORD = "I<3ColdFusion&Cookies"
};

writeDump(serializer.serialize( tricia ));

答案 2 :(得分:0)

我遇到了同样的问题,并决定修改我的SQL语句,该语句提取“否”字符串值。有点像这样:

SELECT CASE WHEN <colname> = 'NO' THEN 'NON' ELSE <colname> AS <colname>, <colname2>, etc...

然后我从JSON处理字符串值“NON”,因为我会处理“NO”情况。

不是最优雅的解决方案,但它似乎适用于我的应用程序。