我正在尝试解析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?
你永远不应该手工创建一个json字符串.
相反,您应该使用http://json.org提供的库或内置方法.最新版本的coldfusion有SerializeJSON和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,生成的密钥名称始终是大写的.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |