如何以JSON文件格式显示列名? (通过ColdFusion)

时间:2013-05-23 21:49:18

标签: json coldfusion

通过以下ColdFusion .cfm文件,我能够获得一个.json字符串,它向我显示所请求的数据:

json1.cfm

<cfsetting showdebugoutput="no">
<cfheader name="Content-Type" value="application/json">
<cfquery name="GetData" datasource="myDataSource">
    select distinct ap1, ap2, nombre, idcargo, idencal, telefono, email, cve_nivel, sexo
    FROM vlayout_1
    where cct='13DCC0003S'
</cfquery>

<cfoutput>
#SerializeJSON(GetData, false)#
</cfoutput>

一旦我将它上传到我的本地服务器上,这就是结果.json string:

{"COLUMNS":["AP1","AP2","NOMBRE","IDCARGO","IDENCAL","TELEFONO","EMAIL","CVE_NIVEL","SEXO"],"DATA":[["ALVARADO","HERNANDEZ","ALEJANDRO",3,1,"","",5,"M"],["BAUTISTA","OSORIO","ANTONIO",3,5,"","",6,"M"],["HERNANDEZ","ALVARADO","LAURA",3,5,"","",6,"F"],["HERNANDEZ","ANDRADE","MA. TERESA",2,5,"","",6,"F"],["HERNANDEZ","HERNANDEZ","FILOMENA",3,5,"","",4,""],["HERNANDEZ","HERNANDEZ","FILOMENA",3,5,"","",5,""],["HERNANDEZ","HERNANDEZ","MARIA GUADALUPE",3,5,"","",5,"F"],["HERNANDEZ","HERNANDEZ","MARIA LUISA",3,5,"","",4,"F"],["HERNANDEZ","MARTINEZ","MARIA MANUELA",3,5,"","",4,"F"],["HERNANDEZ","QUINTERO","CIRILA",3,5,"","",5,"F"],["LORENZO","LEON","JUAN",3,5,"","",6,"M"],["MARTINEZ","HERNANDEZ","ROSALBA",1,5,"","",5,"F"],["SIXTO","RAMIREZ","EUTIQUIO",3,5,"","",4,"M"],["SIXTO","RAMIREZ","EUTIQUIO",3,5,"","",5,"M"]]} 

我在http://jsonlint.com/验证后,这就是我得到的:

{
    "COLUMNS": [
        "AP1",
        "AP2",
        "NOMBRE",
        "IDCARGO",
        "IDENCAL",
        "TELEFONO",
        "EMAIL",
        "CVE_NIVEL",
        "SEXO"
    ],
    "DATA": [
        [
            "ALVARADO",
            "HERNANDEZ",
            "ALEJANDRO",
            3,
            1,
            "",
            "",
            5,
            "M"
        ],
        [
            "BAUTISTA",
            "OSORIO",
            "ANTONIO",
            3,
            5,
            "",
            "",
            6,
            "M"
        ],
        [
            "HERNANDEZ",
            "ALVARADO",
            "LAURA",
            3,
            5,
            "",
            "",
            6,
            "F"
        ],
        [
            "HERNANDEZ",
            "ANDRADE",
            "MA. TERESA",
            2,
            5,
            "",
            "",
            6,
            "F"
        ],
        [
            "HERNANDEZ",
            "HERNANDEZ",
            "FILOMENA",
            3,
            5,
            "",
            "",
            4,
            ""
        ],
        [
            "HERNANDEZ",
            "HERNANDEZ",
            "FILOMENA",
            3,
            5,
            "",
            "",
            5,
            ""
        ],
        [
            "HERNANDEZ",
            "HERNANDEZ",
            "MARIA GUADALUPE",
            3,
            5,
            "",
            "",
            5,
            "F"
        ],
        [
            "HERNANDEZ",
            "HERNANDEZ",
            "MARIA LUISA",
            3,
            5,
            "",
            "",
            4,
            "F"
        ],
        [
            "HERNANDEZ",
            "MARTINEZ",
            "MARIA MANUELA",
            3,
            5,
            "",
            "",
            4,
            "F"
        ],
        [
            "HERNANDEZ",
            "QUINTERO",
            "CIRILA",
            3,
            5,
            "",
            "",
            5,
            "F"
        ],
        [
            "LORENZO",
            "LEON",
            "JUAN",
            3,
            5,
            "",
            "",
            6,
            "M"
        ],
        [
            "MARTINEZ",
            "HERNANDEZ",
            "ROSALBA",
            1,
            5,
            "",
            "",
            5,
            "F"
        ],
        [
            "SIXTO",
            "RAMIREZ",
            "EUTIQUIO",
            3,
            5,
            "",
            "",
            4,
            "M"
        ],
        [
            "SIXTO",
            "RAMIREZ",
            "EUTIQUIO",
            3,
            5,
            "",
            "",
            5,
            "M"
        ]
    ]
}

问题是,如何在内容之前显示每个列名? e.g:

 [
                AP1:"SIXTO",
                AP2:"RAMIREZ",
                NOMBRE:"EUTIQUIO",
                IDCARGO:3,
                IDENCAL:5,
                TELEFONO:"",
                EMAIL:"",
                CVE_NIVEL:5,
                SEXO:"M"
            ]

提前非常感谢你!

1 个答案:

答案 0 :(得分:2)

您需要将其转换为结构数组,然后应用serializeJSON()

<cfsetting showdebugoutput="no">
<cfheader name="Content-Type" value="application/json">
<cfquery name="GetData" datasource="myDataSource">
    select distinct ap1, ap2, nombre, idcargo, idencal, telefono, email, cve_nivel, sexo
    FROM vlayout_1
    where cct='13DCC0003S'
</cfquery>

<cfoutput>
#SerializeJSON(queryToArray(GetData))#
</cfoutput>


<cfscript>
/**
 * @hint Converts a query to an array of structures.
 */
public array function queryToArray(required query query){
    var result = [];
    for (var i = 1; i <= query.recordCount; i++){
        arrayAppend(result, queryToStruct(query, i));
    }
    return result;
}

/**
 * @hint Returns the first row of a query as a structure with same case as query column names.
 */
public struct function queryToStruct(required query query, numeric rowNumber=1){

    var struct = {};
    var columns = arguments.query.getMeta().getColumnLabels();

    for (var i = 1; i <= arrayLen(columns); i++){
        struct[columns[i]] = query[columns[i]][arguments.rowNumber];
    }

    return struct;
}
</cfscript>