问题
Through the following ColdFusion .cfm file, I am able to get a .json string, which shows me the requested data:
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>
Once I upload it on my local server, this is the outcome .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"]]}
After I validate on http://jsonlint.com/ this is what I get:
{
"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"
]
]
}
The question is, how can I show every column name before its content? e.g.:
[
AP1:"SIXTO",
AP2:"RAMIREZ",
NOMBRE:"EUTIQUIO",
IDCARGO:3,
IDENCAL:5,
TELEFONO:"",
EMAIL:"",
CVE_NIVEL:5,
SEXO:"M"
]
Thank you so much in advance!
回答1:
You'll need to convert it to an array of structures, then apply 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>
来源:https://stackoverflow.com/questions/16724501/how-can-i-show-the-column-names-in-my-json-file-format-through-coldfusion