You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ColdFusion中遍历嵌套JSON结构获取节点信息

在ColdFusion中遍历嵌套JSON结构(含差异化字段节点)

1. 解析JSON字符串为ColdFusion数据结构

先用deserializeJSON()把原始JSON字符串转换成CF可识别的结构体/数组:

<cfset rawJSON = "你的原始JSON字符串">
<cfset jsonData = deserializeJSON(rawJSON)>

2. 定位目标数组(acList)

从解析后的结构体中取出飞机列表数组:

<cfset aircraftList = jsonData.acList>

3. 遍历每个飞机节点(处理差异化字段)

由于每个飞机节点的字段数量不一致,需要动态遍历节点的所有键值对,以下提供两种实现方式:

方式一:使用structKeyList遍历(兼容所有CF版本)

<cfloop array="#aircraftList#" index="currentAircraft">
    <h4>飞机详情</h4>
    <!--- 获取当前节点的所有键名,转为逗号分隔列表 --->
    <cfset fieldNames = structKeyList(currentAircraft, ",")>
    <cfloop list="#fieldNames#" index="fieldName">
        <p><strong>#fieldName#</strong>: #currentAircraft[fieldName]#</p>
    </cfloop>
</cfloop>

方式二:使用structEach函数(ColdFusion 2018及以上版本)

更简洁的遍历方式,直接迭代结构体的键值对:

<cfloop array="#aircraftList#" index="currentAircraft">
    <h4>飞机详情</h4>
    <cfscript>
        structEach(currentAircraft, function(fieldValue, fieldName) {
            writeOutput("<p><strong>" & fieldName & "</strong>: " & fieldValue & "</p>");
        });
    </cfscript>
</cfloop>

4. 处理嵌套结构(可选)

如果飞机节点内部还有嵌套的结构体或数组,可通过递归函数展开所有层级:

<cffunction name="renderNestedData" access="public" returntype="string">
    <cfargument name="data" required="true">
    <cfset var outputStr = "">
    
    <cfif isStruct(arguments.data)>
        <cfset outputStr &= "<ul>">
        <cfloop list="#structKeyList(arguments.data)#" index="key">
            <cfset outputStr &= "<li><strong>#key#</strong>: " & renderNestedData(arguments.data[key]) & "</li>">
        </cfloop>
        <cfset outputStr &= "</ul>">
    <cfelseif isArray(arguments.data)>
        <cfset outputStr &= "<ol>">
        <cfloop array="#arguments.data#" index="item">
            <cfset outputStr &= "<li>" & renderNestedData(item) & "</li>">
        </cfloop>
        <cfset outputStr &= "</ol>">
    <cfelse>
        <cfset outputStr &= arguments.data>
    </cfif>
    
    <cfreturn outputStr>
</cffunction>

<!--- 调用递归函数展示所有数据 --->
<cfloop array="#aircraftList#" index="currentAircraft">
    <h4>飞机详情(含嵌套结构)</h4>
    #renderNestedData(currentAircraft)#
</cfloop>

内容的提问来源于stack exchange,提问作者Mike Savoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:35:23