如何在CFML中的循环内的变量中嵌套循环迭代



我正在尝试循环使用CFML中的json响应,需要进行一次调用来获取页数,然后对每个连续的页面进行一次呼叫,然后循环使用项来获取数据。在这样做的过程中,我有一个嵌套循环,它需要一个嵌套变量。因此,例如,我的初始循环将导致:

#jsonarray.items.1.id#
#jsonarray.items.2.id#
#jsonarray.items.3.id#
#jsonarray.items.4.id#
and so on.

所以在我的内部循环中,我试图通过做另一个这样的循环来替换这个数字:

<cfloop from="1" to="50" index="thisBatchItem">
</cfloop> 

但是,我必须将索引嵌套在我的变量中,这当然不起作用。

有人能指出我在这里遗漏了什么吗?

这是我正在使用的代码,您将看到我遇到问题的明显地方。我放入#jsonaray.items.#thisBatchItem#.id#只是为了显示我试图实现这一目标的位置。我知道它不起作用。

<cfhttp method="GET" result="httpResp" url="https://example.com/api?filter[batch.date][gte]=2022-02-01&filter[batch.date][lte]=2022-03-07&page=1&per-page=50" throwonerror="false">
<cfhttpparam type="header" name="Authorization" value="Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX">
<cfhttpparam type="header" name="Content-type" value="application/json">
</cfhttp>            
<cfoutput>
<cfloop from="1" to="#pageCount#" index="thisPage">
<cfhttp method="GET" result="httpResp" url="https://example.com/api?filter[batch.date][gte]=2022-02-01&filter[batch.date][lte]=2022-03-07&page=#thisPage#&per-page=50" throwonerror="false">
<cfhttpparam type="header" name="Authorization" value="Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX">
<cfhttpparam type="header" name="Content-type" value="application/json">
</cfhttp>            
<cfset jsonarray = deserializeJson(httpResp.fileContent)>
<cfloop from="1" to="50" index="thisBatchItem">
<cfif StructKeyExists(jsonarray,"#jsonarray.items.#thisBatchItem#.id#")>
#jsonarray.items.[#thisBatchItem#].id#<br>
</cfif>
</cfloop>
</cfloop>
</cfoutput>

由于items是一个结构数组,因此使用"阵列";环

如果某些结构键是可选的,请尝试使用安全导航运算符?.。在下面的例子中,它防止了当代码使用不存在的关键字名称(如"(时发生错误;lookMaNoErrors"?

<cfset jsonResponse = deserializeJson(httpResp.fileContent)>
<cfloop array="#jsonResponse.items#" index="currentItem">
id #currentItem.id#<br> 
lookMaNoErrors #currentItem?.lookMaNoErrors#<br>
</cfloop>

更新:

要回答最初的问题,您需要使用结构表示法。此外,不要对循环的上限进行硬编码,而是使用数组长度:

<cfloop from="1" to="#arrayLen(jsonResponse.items)#" index="itemIndex">
id #jsonResponse.items[itemIndex].id#            

</cfloop>

demo trycf.com

最新更新