如何从CFCin ColdFusion返回低级JSON?

Dan*_* T. 8 coldfusion json case-sensitive coldfusion-9

我有一个ColdFusion组件,它将返回一些JSON数据:

component
{
    remote function GetPeople() returnformat="json"
    {
        var people = entityLoad("Person");
        return people;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,返回的JSON具有大写的所有属性名称:

[
    {
        FIRSTNAME: "John",
        LASTNAME: "Doe"
    },
    {
        FIRSTNAME: "Jane",
        LASTNAME: "Dover
    }
]
Run Code Online (Sandbox Code Playgroud)

有没有办法强制框架返回JSON,以便属性名称都是小写的(可能是其他人编写的自定义UDF/CFC)?

Jas*_*ean 16

是的,不幸的是,这就是ColdFusion的工作方式.设置一些变量时,可以强制使用小写,例如结构:

<cfset structName.varName = "test" />
Run Code Online (Sandbox Code Playgroud)

将使用大写名称设置变量.但:

<cfset structName['varname'] = "test" />
Run Code Online (Sandbox Code Playgroud)

将强制小写(或camelcase取决于你传入的内容).

但是对于你正在做的ORM,我认为你不会对它有任何控制权.如果我错了,有人会纠正我.


Pet*_*ton 5

来自http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_s_03.html
注意:ColdFusion内部使用全大写字符表示结构键名,因此,将键名序列化为全部-uppercase JSON表示.任何处理ColdFusion结构的JSON表示的JavaScript都必须使用全大写结构键名,例如CITY或STATE.您还使用全大写名称COLUMNS和DATA作为表示JSON格式的ColdFusion查询的两个数组的键.

如果您自己定义变量,可以使用括号表示法(如Jason的答案所示),但是使用ORM这样的内置函数我认为你被卡住了 - 除非你想创建自己的结构,并克隆ORM版本手动,降低每个键的外壳,但这不是一个很好的解决方案.:/