替换空字符串

Con*_*art 2 coldfusion json

我正在尝试解析json文件并遇到了这个问题.我从查询中提取一些数据并将其转换为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()#"
}'>
Run Code Online (Sandbox Code Playgroud)

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

use*_*654 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)>
Run Code Online (Sandbox Code Playgroud)

这样做意味着您不必担心空字符串,制表符甚至引号.


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

<cfprocessingdirective preserveCase="true">
Run Code Online (Sandbox Code Playgroud)

在ColdFusion 11+中,可以使用服务器或应用程序级别设置来解决此问题.目前,这些设置仅适用于基本结构,而不适用于系统范围.

<cfset this.serialization.preserveCaseForStructKey = true>
Run Code Online (Sandbox Code Playgroud)

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

<cfset person = {}>
<cfset person["fname"] = "John">
<cfset person["lname"] = "Smith">
<cfset person["occupation"] = "Developer">
Run Code Online (Sandbox Code Playgroud)

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

  • (编辑)完全同意不滚动你自己的JSON.AFAIK,ACF没有与案件有关的cfprocessingdirective.除了使用长手方法保留大小写,即`structName ["desiredKeyNameCase"] ="value"`,CF11支持一些新的[应用程序级别设置,如this.serialization.preservecaseforstructkey](http://blog.adamcameron. me/2014/02/coldfusion-11-preservecaseforstructkey.html)(取得了不同程度的成功......). (3认同)