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

How do I accomplish nesting a loop iteration in a variable inside a loop in 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> 

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

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

这是我正在使用的代码,您会看到我有问题的明显地方。我输入 #jsonarray.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 是一个结构数组,因此使用“数组”循环更简单、更清晰。

如果某些结构键是可选的,请尝试使用 safe navigation operator ?.。在下面的示例中,它可以防止在代码使用 non-existent 键名(如“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