您的代码中有一些问题。我将把它分解:
假设您有如下查询结果:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
然后像你做的那样用for( row in query ) 遍历(循环)你的查询是行不通的:
for( i in myquery ){
st['Contact'][#i#]['ID'] = i.id;
st['Contact'][#i#]['Name'] = i.name;
st['Contact'][#i#]['Email'] = i.email;
}
原因:
- 使用
for( row in myquery ) 时,您正在逐行迭代查询。但是在您的循环中,您想使用索引i 来设置您的数组。然后,i 将不是您期望的数字整数,而是一个完整的行集。它将尝试使用完整的行作为索引,这不应该工作。如果您需要索引,您还必须按索引迭代查询,例如与for (i = 1; i <= myquery.recordCount; i++)。作为参考,请参阅如何按索引迭代查询,请参阅 cfdocs here,或者在不使用任何索引的情况下使用 ArrayAppend() 或 append() 成员。
- 您需要先将
st['Contact'] 预定义为带有st['Contact']=[]; 的数组,否则CF 会认为它是一个结构体
- 此外,您正在使用
i 设置数组,但使用[#i#] 输出它而不带任何引号。在输出中使用# 包含这样的引号:st['Contact']['#i#']['ID'] 或不包含这样的引号:st['Contact'][i]['ID']。但不是像 st['Contact'][#i#]... 这样的。
更正您的代码以使 st.Contact 填充为数组,它可能类似于:
备选方案一:使用ArrayAppend()或append()成员函数:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
相同但更简单:
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
备选方案2:使用for (i = 1; i <= myquery.recordCount; i++)按索引迭代查询
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
如果您在我提交的查询的帮助下转储变量st,您将获得以下数据结构(这里只是字符串化的):
{"Contact":[
{"Name":"Antonio","ID":43,"Email":"antonio@somedomain.com"},
{"Name":"Manuel","ID":65,"Email":"manuel@somedomain.com"},
{"Name":"Paula","ID":77,"Email":"paula@somedomain.com"},
{"Name":"Jennifer","ID":87,"Email":"Jennifer@somedomain.com"}
]}
这是两种替代方案的完整 cfscript 代码:
myquery= queryNew(
"id, name, email",
"integer,varchar,varchar",
[
{"id":43,"name":"Antonio", "email": "antonio@somedomain.com"},
{"id":65,"name":"Manuel", "email": "manuel@somedomain.com"},
{"id":77,"name":"Paula", "email": "paula@somedomain.com"},
{"id":87,"name":"Jennifer", "email": "Jennifer@somedomain.com"}
]);
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append(
{"id": myquery.id,
"name": myquery.name,
"email": myquery.email
});
}
dump(st);
// simplier version of above
st['Contact']=[];
for ( i in myquery ) {
st['Contact'].append( i );
}
dump(st);
st['Contact']=[];
for (i = 1; i <= myquery.recordCount; i++) {
st['Contact'][i]['ID'] = myquery.id[i];
st['Contact'][i]['Name'] = myquery.name[i];
st['Contact'][i]['Email'] = myquery.email[i];
}
dump(st);