根据我过去的经验,冷融合查询的列可以像二维数组一样被引用。有时我也会遇到这个问题。
- 从电子表格创建查询
- 将列名放入数组
- 在尝试访问该行时仅获取第一个元素
- 必须使用解决方法
<p></p>
<pre><code>//imports is a query object after this function
var imports = convertSpreadsheetWOHeaders(spreadsheet, 1);
//this is used to give name values in the json struct, not to access the query columns
var jsonHeaders = ListToArray("number,constructiontype,description,site_address,parcel,permit_date,note_Applicant,note_Contractor,valuation,note_Bld_Fees,note_Other_Fees");
//this gives me ["col_1","col_2","col_3",,,etc]. used to access query columns
var columnHeaders = imports.getColumnNames();
writeDump(imports[columnHeaders[1]]);
writeDump(imports);
</code></pre>
<p></p>
我只剩下第一列中的第一个元素。我当然明白:
Message: You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members.
尝试执行此操作时:
structInsert(jsonStruct,jsonHeaders[j],imports[columnHeaders[j]][i]);
但是,这有效:
writeDump(ListToArray(ArrayToList(imports[columnHeaders[1]],'|'),'|',true));
我首先转储导入["col_1"],并且只得到第一个元素。 然后,我像上图所示那样转储 ListToArray(ArrayToList(imports["col_1"])) ,它为我提供了整列。
为什么我一开始就无法正确访问该列?
最佳答案
真正的问题:
我最初尝试将 jsonHeaders 列表作为数组访问,而不对其执行 ListToArray()
。之后我的功能就起作用了。
但是。下一部分很有帮助。
当尝试访问查询对象时,执行queryObject["columnName"]
被视为queryObject["columnName"][1]
的快捷方式,因此coldfusion只会给你第一个元素。
但是当我说 ListToArray(ArrayToList())
时,coldfusion 发现 ArrayToList
必须接受数组,因此会出现异常,并且该列作为数组返回。
要将列重新作为数组使用,您可以执行以下操作
ListToArray(ArrayToList(query["column"]));
ListToArray(valueList(query.column));
valueArray(query, "column");
关于Coldfusion 查询断列结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972706/