替换空字符串

时间:2016-02-19 22:42:58

标签: json coldfusion

我正在尝试解析json文件并遇到this问题。我从查询中提取一些数据并将其转换为json,将其发送到另一个文件,然后解析它。但是,有些数据是一个空字符串,当我尝试解析它时会破坏它。

我目前正在生成json对象:

<cfset person = '{
    "fname":"#ReReplace(firstName, '\t', '\\t', "all").trim()#",
    "lname":"#ReReplace(lastName, '\t', '\\t', "all").trim()#",
    "occupation":"ReReplace(lastName, '\t', '\\t', "all").trim()#"
}'>

我目前已经在使用replace来处理值中的选项卡(不要问,人们做奇怪的事情)并且想使用replace来处理空字符串。我尝试使用Replace(firstName, '', '""', "all")但是冷却并不喜欢那一点,原因很明显。一个选择是在我进入json世代之前使用if语句,但是我想知道是否有人知道使用Replace的更快方式?

1 个答案:

答案 0 :(得分:8)

你永远不应该手工创建一个json字符串。

相反,您应该使用http://json.org提供的库或内置方法。最新版本的coldfusion有Seri​​alizeJSON和DeSerializeJSON,所以你应该使用它们。

<cfset person = {}>
<cfset person.fname = firstName.trim()>
<cfset person.lname = lastName.trim()>
<cfset person.occupation = occupation.trim()>
<cfset personJSON = SerializeJSON(person)>

这样做意味着您不必担心空字符串,标签或甚至引号。

可能需要注意的是,根据您的应用程序设置,您的键名称可能会更改为全部大写。在railo / lucee中,可通过设置全局应用程序设置或使用

来解决此问题
<cfprocessingdirective preserveCase="true">

在ColdFusion 11+中,可以使用服务器或Application level setting来解决此问题。目前,这些设置仅适用于基本结构,而不适用于系统范围。

<cfset this.serialization.preserveCaseForStructKey = true>

对于ColdFusion 10及更早版本,必须使用longhand结构语法来保留大小写:

<cfset person = {}>
<cfset person["fname"] = "John">
<cfset person["lname"] = "Smith">
<cfset person["occupation"] = "Developer">

由于您提到了查询,ColdFusion 11还添加了一个新的序列化选项,它将查询对象转换为更标准的,Ajax友好格式:结构数组。新格式既可以在应用程序级别应用,也可以在每次使用的基础上应用,即serializeJSON(queryName, "struct")。不幸的是,它们都没有保留查询列名称的情况。与query.columnList一样,生成的密钥名称​​始终大写。