我有一个存储过程,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!”
答案 0 :(得分:3)
要回答您的底线问题(帖子的最后一句),答案是:否。
你可以搞乱数据,以欺骗ColdFusion认为它不是一个布尔字符串,但这不是一个很好的方法。
你基本上需要使用ColdFusion以外的东西来创建你的JSON字符串。 ColdFusion充斥着JSON错误,几乎要求它的JSON产品不适合用途。我认为发现的大多数已经在CF11中得到修复,正如您所注意到的那样。
我没有在产品中使用它,但是我使用Google's GSON API从CFML数据中构建JSON,获得了合理的概念验证成功。
答案 1 :(得分:3)
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”情况。
不是最优雅的解决方案,但它似乎适用于我的应用程序。