Coldfusion 查询断列结构
Coldfusion Query broken column structure
根据我过去的经验,coldfusion 查询的列可以像二维数组一样被引用。虽然有时我会遇到这个问题。
- 从电子表格创建查询
- 将列名放入数组中
- 尝试访问行时仅获取第一个元素
- 必须使用解决方法
</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);
我只剩下第一列中的第一个元素。我当然得到:
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));
我首先转储了 imports["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 查询的列可以像二维数组一样被引用。虽然有时我会遇到这个问题。
- 从电子表格创建查询
- 将列名放入数组中
- 尝试访问行时仅获取第一个元素
- 必须使用解决方法
</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);
我只剩下第一列中的第一个元素。我当然得到:
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));
我首先转储了 imports["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");