【问题标题】:Using JavaScript to handle query data serialized by ColdFusion 9 neatly?使用 JavaScript 巧妙地处理由 ColdFusion 9 序列化的查询数据?
【发布时间】:2014-06-17 08:37:39
【问题描述】:

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 的,所以我可以访问节点(如果这对我的事业有帮助的话)。

【问题讨论】:

标签: javascript json node.js coldfusion titanium


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我这样定义 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 值。

    【讨论】:

      【解决方案3】:

      查看问题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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        • 2023-03-26
        • 2011-03-20
        • 2015-03-11
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多