通过以下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"
]
提前非常感谢你!
答案 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>