ColdFusion的serializeJSON函数发送如下字符串:
{"COLUMNS":["COURSE","CONTID","CODE"],"DATA":[["Texting 101",41867,"T043"]]}
如何使用javascript整洁地访问数据?
var response = JSON.parse(this.responseText);
console.log(response["CODE"]); // this doesn't work of course, but is there any way?
console.log(response.DATA[0][1]) // this works but it's not readable
是否可以使用列名而不是数组位置来访问JSON数据?这适用于Titanium Studio,因此我可以访问节点(如果这有助于我的原因)。
答案 0 :(得分:2)
我创建了cfquery-to-json来为ColdFusion查询创建备用JSON格式。看看ArrayColleciton,它将查询对象转换为结构数组。结构的键是查询中的列名。
{
"data":[
{
"course":"Texting 101",
"contid":41867,
"code":"T043"
}
]
}
这使您可以轻松引用data[x].course
。
答案 1 :(得分:1)
查看问题putting selected values from the JSON的答案。然后,您应该能够按预期访问该列。
public array function queryToArray( required query qry ) {
var columns = arguments.qry.getColumnNames();
var OutputResult = [];
for( var i = 1; i LTE qry.recordCount; i++ ) {
var obj = {};
for( var k = 1; k LTE arrayLen( columns ); k++ ) {
structInsert( obj, columns[ k ], arguments.qry[ columns[ k ] ][ i ] );
}
arrayAppend(OutputResult, obj );
}
return OutputResult;
}
访问以下功能:
<cfset myJSON = queryToArray( myquery ) />
<cfoutput>#serializeJSON( myJSON )#</cfoutput>
答案 2 :(得分:1)
我定义了serializeJSON的serializeQueryByColumns属性,如下所示:
然而它会有点时髦:
{"ROWCOUNT":1,
"COLUMNS":["COURSE","CONTID","CODE"],
"DATA":{
"COURSE":["Texting 101","Sexting for Seniors","OMFGLOL","Columbus Day"],
"CONTID":[41867,10736,23034,28012],
"CODE":["T043","SFS","OMGL0100","CDSTD"]
}}
但你可以像这样访问它:
... Ti.UI.createHTTPClient ...
var response = JSON.parse(this.responseText);
label.text = "The 3rd Course is: ", response.DATA.COURSE[2];
我是从源Henry中的GuaravS得到的 在他的回答中。我创建了一个新的答案,因为亨利的评论是一个简短的评论/不是答案,我想扩展定义 serializeJSON中的serializeQueryByColumns值。