使用JavaScript来处理由ColdFusion 9序列化的查询数据整齐地?

ColdFusion的serializeJSON函数像这样发送一个string:

{"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 

是否可以使用列名称而不是arrays位置访问JSON数据? 这是titanium工作室,所以我有访问节点(如果这有助于我的原因)。

我创build了cfquery-to-json来为ColdFusion查询创build备用的JSON格式。 看看ArrayColleciton,它将查询对象转换为一个结构数组。 结构的键是查询中的列名。

{ "data":[ { "course":"Texting 101", "contid":41867, "code":"T043" } ] }

这使您可以轻松地引用data[x].course

我定义了serializeJSON的serializeQueryByColumns属性,如下所示:

#serializeJSON(cfQueryVar,true)#

然而它会出现一点点时髦:

 {"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]; 

引文

我从GuaravS的回答中得到了亨利的来源。 我创build了一个新的答案,因为Henry的评论是一个简短的评论/而不是一个答案,我想扩展在serializeJSON中定义serializeQueryByColumns值。

查看从JSON中select的值的问题的答案。 您应该能够按预期访问该列。

 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; } 

访问该function如下:

 <cfset myJSON = queryToArray( myquery ) /> <cfoutput>#serializeJSON( myJSON )#</cfoutput>