使用JavaScript处理ColdFusion 9序列化的查询数据整齐划一?

时间:2014-04-30 21:05:52

标签: javascript json node.js coldfusion titanium

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,因此我可以访问节点(如果这有助于我的原因)。

3 个答案:

答案 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属性,如下所示:

#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];

引用

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