如何从cfin ColdFusion返回小写JSON ?



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

component
{
    remote function GetPeople() returnformat="json"
    {
        var people = entityLoad("Person");
        return people;
    }
}

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

[
    {
        FIRSTNAME: "John",
        LASTNAME: "Doe"
    },
    {
        FIRSTNAME: "Jane",
        LASTNAME: "Dover
    }
]

是否有任何方法强制框架返回JSON,以便属性名称都是小写的(也许是别人写的自定义UDF/CFC)?

是的,不幸的是,这就是ColdFusion的工作方式。当设置一些变量时,你可以强制使用小写,就像structs一样:

<cfset structName.varName = "test" />

将为变量设置大写名称。但是:

<cfset structName['varname'] = "test" />

将强制使用小写(或驼峰大小写,取决于你传递的内容)。

但是你正在做的ORM的东西,我不认为你能够有任何控制它。如果我说错了,有人来纠正我。

从http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_s_03.html


注意:ColdFusion内部表示使用的结构键名全大写字符,因此将键名序列化为全大写JSON表示。任何处理JSON的JavaScriptColdFusion结构的表示必须使用全大写结构键名,如CITY或STATE。你也可以使用全大写名称COLUMNS和DATA作为两个数组的键以JSON格式表示ColdFusion查询

如果你自己定义变量,你可以使用括号符号(如Jason的答案所示),但对于像ORM这样的内置东西,我认为你被卡住了——除非你想创建自己的结构体,并手动克隆ORM版本,小写每个键,但这不是一个很好的解决方案。:/

这应该像你描述的那样工作。

component
{
    remote function GetPeople() returnformat="json"
    {
        var people = entityLoad("Person");
        var rtn = [];
        for ( var i = 1; i <= arrayLen( people ); i++ ) {
            arrayAppend( rtn, {
                "firstname" = people[i].getFirstname(),
                "lastname" = people[i].getLastname()
            } );
        }
        return rtn;
    }
}

如果任何实体属性返回null,则struct key不存在。要解决这个问题,可以输入

component
{
    remote function GetPeople() returnformat="json"
    {
        var people = entityLoad("Person");
        var rtn = [];
        for ( var i = 1; i <= arrayLen( people ); i++ ) {
            var i_person = {
                "firstname" = people[i].getFirstname(),
                "lastname" = people[i].getLastname()
            };
            if ( !structKeyExists( i_person, "firstname" ) ) {
                i_person["firstname"] = ""; // your default value
            }
            if ( !structKeyExists( i_person, "lastname" ) ) {
                i_person["lastname"] = ""; // your default value
            }
            arrayAppend( rtn, i_person );
        }
        return rtn;
    }
}

最新更新