我有如下所示的 JSON 数据
{
"category" : [
{
"name" : "digital stickers",
"products" : [
{
"name" : "round digital stickers",
"urlPublic" : "index.cfm/digital-stickers/round-stickers",
"urlPortal" : "tab=round digital stickers"
},
{
"name" : "square digital stickers",
"urlPublic" : "index.cfm/digital-stickers/square-stickers",
"urlPortal" : "tab=square digital stickers"
}
]
},
{
"name" : "Litho stickers",
"products" : [
{
"name" : "round litho stickers",
"urlPublic" : "index.cfm/litho-stickers/round-stickers",
"urlPortal" : "tab=round litho stickers"
},
{
"name" : "square litho stickers",
"urlPublic" : "index.cfm/litho-stickers/square-stickers",
"urlPortal" : "tab=square litho stickers"
}
]
}
]
}
我使用了 DeserializeJSON(theData)
如下
<cfset cfData=DeserializeJSON(theData)>
然后我设置了一个数据数组来存储类别值
<cfset dataArray = cfData.category>
然后循环吐出它们
<cfloop array="#dataArray#" index="elem">
<!--- print out value for demo purposes --->
<cfoutput>
<h3>#elem.name#</h3>
</cfoutput>
</cfloop>
一切都很好,我看到了 2 个类别标题 -“数字贴纸”和“光刻贴纸”。
我现在要做的是在每个相关类别下的列表中显示产品。所以在“数字贴纸”下有“圆形数字贴纸”和“方形数字贴纸”,然后在光刻贴纸下有“圆形光刻贴纸”和“方形光刻贴纸”等。
我尝试创建一个新数组,如下所示
<cfset productArray = cfData.products>
但我收到错误消息“Element PRODUCTS is undefined in CFDATA”
然后我的计划是将这个循环设置在当前循环内,循环遍历相关产品。我想我可能需要为每个类别使用一个单独的数组来遍历该特定类别中的产品。
如有任何帮助,我们将不胜感激 - 提前致谢!
最佳答案
您遇到错误是因为产品不在 cfData
下。产品数组位于 cfdata.category[i].products
下。为了达到预期的结果,您可以执行以下操作:
<cfoutput>
<h3>#elem.name#</h3>
<cfloop array="#elem.products#" index="innerelem">
#innerelem.name#<br>
</cfloop>
</cfoutput>
更新:
反序列化 JSON 后,它只是一个普通结构。您的 cfdata.category (dataArray)
是一个包含名称和产品键的结构数组
。 products 是另一个结构数组
。
当您循环遍历 dataArray 时,您会在 elem 变量中获得一个包含名称和产品键的结构。然后您需要遍历产品以获取产品中的名称,这就是我在上面的代码中所做的。
要理解代码,请在每个阶段使用 cfdump。
- 在第一个循环中,cfdump elem。您将获得名称结构和 产品。
- 您通过 elem.name 访问名称。
- 同样,您可以通过 elem.products 访问产品。
- 如果您 cfdump elem.products,您会注意到它是一个结构数组。
- 因为您可以访问 elem.products 数组,所以您可以像循环数组 cfdata.category 一样循环它。您必须在第一个循环内执行此操作,因为您可以在第一个循环内访问 elem.products。
- 现在在第二个循环中,您在变量 innerelem 中获取 elem.products 中的每个结构。
- 第二个循环中的 cfdump innerelem。您将看到一个结构,其中包含键名、urlpublic 和 urlportal 及其各自的值。
- 由于您有权访问此结构,因此您可以通过 innerelem.name 获取您的姓名。
- 你对 url 做得很好。
- 经常使用 cfdump 来理解代码和调试代码。也在开发代码的时候。它会对你有很大帮助。
关于arrays - 在 ColdFusion 中使用 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37276657/