使用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>