首页 > 解决方案 > 如何遍历结构数组并显示所有键值

问题描述

我正在遍历一组结构并尝试分配和存储所有键值。如果我将内部循环包装在 中<cfoutput>,则会收到错误消息:“复杂对象类型无法转换为简单值”。如果我把它排除在外,那么它就不起作用。我错过了什么?

在此处输入图像描述

<cfif isJSON(httpResp.fileContent)>
    <cfset jsonData = deserializeJSON(httpResp.fileContent) />    

    <cfloop from="1" to="#arrayLen(jsonData)#" index="i">
        <cfset data = jsonData[i]>

        <!---<cfoutput>--->                 
        <cfloop collection="#data#" item="key">
            #key#:#data[key]#<br>
        </cfloop>       
        <!---</cfoutput>---> 

    </cfloop>

    <cfdump var="#jsonData#">

<cfelse>
      Did not receive a valid Json object
</cfif>

这是输出:

#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#
#key#:#data[key]#

标签: arrayscoldfusion

解决方案


尝试分配和存储所有键值

虽然您可以在技术上动态地输出所有键,但如果最终目标是操作和/或存储值,那么动态循环可能无论如何都不是您想要的。要提取特定值,只需明确引用键名 - 使用点表示法。例如:

<cfloop array="#jsonData#" index="prop">
    <cfoutput>
        <hr>confirmation = #prop.confirmation#
        <br>id = #prop.id#
        <br>label.carrier = #prop.label.carrier#
        <br>label.tracking = #prop.label.tracking#
        <br>order.created_at = #prop.order.created_at#
        <br>policy.logistic_code = #prop.policy.logistic_code#
        <br>policy.refund_code = #prop.policy.refund_code#
        <br>ref.order = #prop.ref.order#
        <br>state = #prop.state#
        ... 
    </cfoutput>
</cfloop>

但是,要回答您的问题,错误消息仅意味着cfoutput只能处理简单的值。由于您尝试显示的某些值实际上是结构(即复杂对象),例如labeland states,因此cfoutput在尝试输出它们时会阻塞。


推荐阅读