转换为 JSON 时保留 Coldfusion 结构的大小写

Rob*_*b M 5 coldfusion

使用数组表示法在用于保留键大小写的结构中创建键。

<cfset var response = structNew()>
<cfset response[ "error" ] = 0>
<cfset response[ "message" ] = "">
<!--- this worked when converting this struct to a JSON
Run Code Online (Sandbox Code Playgroud)

所以当我实际将一些数据放入结构中时:

<cfset response.error = 1>
<cfset response.message = "There was an error inserting the record...">
Run Code Online (Sandbox Code Playgroud)

当我在 Firebug 控制台上看到这个时,我感到很惊讶:

{"MESSAGE":"There was an error inserting the record...","ERROR":1}

请注意,这些信息是我期望看到的。

我知道我是否会使用<cfset response.error = 0>, 来避免在将其转换为 JSON 时不保留的情况,但这在过去对我有用。我是否做错了什么而我视而不见,或者CF10中做了什么改变?

编辑:

在所有回复回来之前,我尝试了大家所说的。

<cfset response["error"] = 1>
<cfset response["message"] = "There was an error inserting the record...">
Run Code Online (Sandbox Code Playgroud)

它起作用了。所以,我猜他们改变了serializeJSONCF10 的工作方式。

很高兴知道。

Sea*_*lsh 3

如果您继续使用方括号表示法而不是点表示法引用结构键,则在使用 时应该不会出现大小写问题serializeJSON()

然而,在 CF9 上进行测试后,无论我使用括号还是点符号,似乎都可以正常工作。这可能是 CF9 和 10 之间的差异,正如 Ray 建议的那样,您可能需要为其提交错误报告。

这是我在 CF9 中所做的:

<cfset response = structNew()>
<cfset response[ "error" ] = 0>
<cfset response[ "message" ] = "">
<!--- this worked when converting this struct to a JSON --->

<cfoutput>#serializeJSON(response)#</cfoutput><br /><br />

<!--- This outputs {"message":"","error":0} --->

<cfset response.error = 1>
<cfset response.message = "There was an error inserting the record...">

<cfoutput>#serializeJSON(response)#</cfoutput>
<!--- This outputs {"message":"There was an error inserting the record...","error":1} --->
Run Code Online (Sandbox Code Playgroud)