【问题标题】:Error displaying JSON Array Data - Complex object types cannot be converted to simple values显示 JSON 数组数据时出错 - 复杂对象类型无法转换为简单值
【发布时间】:2016-07-12 06:31:28
【问题描述】:

我目前有一个 MoocJson.json 文件,如下所示:

[
 {"body":"some text goes here", 
  "link":"a link is here",
  "name":"name of product goes here",
  "language":"language goes here",
  "tags":["tag1","tag2","tag3","tag4"],
  "initiative":"initiative content goes here",
  "start_date":"start date goes here",
  "categories":["cat1","cat2","cat3"]
 },
{"body":"2 some text goes here", 
 "link":"2 a link is here",
 "name":"2 name of product goes here",
 "language":"2 language goes here",
 "tags":["2 tag1","2 tag2","2 tag3","2 tag4"],
 "initiative":"2 initiative content goes here",
 "start_date":"2 start date goes here",
 "categories":["2 cat1","2 cat2","2 cat3"]
 },
{"body":"3 some text goes here", 
 "link":"3 a link is here",
 "name":"3 name of product goes here",
 "language":"3 language goes here",
 "tags":["3 tag1","3 tag2"],
 "initiative":"2 initiative content goes here",
 "start_date":"2 start date goes here",
 "categories":["3 cat1"]
 }
]
// End of JSON file

我的CF代码如下:

<cffile action="read" file="#ExpandPath("./MoocJson.json")#" variable="myxml">
<cfset mydoc = deserializedJSON(myxml)>
<cfdump var="#mydoc#">   <!--- this dumps out the JSON in Array format --->

<cfoutput> My Doc Length = #arraylen(mydoc)#</cfoutput>

<!--- Loop through Array of mydoc and out put content --->
<cfoutput>
<cfloop from="1" to="#arrayLen(mydoc)#" index="i">
<cfset Course = mydoc[i]>

#Course.Name# <br>
#Course.body# <br>
#Course.language# <br>
#Course.link# <br>
#Course.initiative# <br>
#Course.start_date# <br>
#Course.tags# <br>
#Course.categories# <br>

</cfloop>
</cfoutput>
<!--- End of Code --->

当我运行它时,除了 TAGS 和 CATEGORIES 之外的所有内容都会显示。对于这两个我得到一个错误

复杂对象类型不能转换为简单值

如何读取主数组中的 TAGS 和 CATEGORIES 数组?

【问题讨论】:

  • CFOutput 只能处理简单的值(字符串、数字等)。正如错误信息所说,一些变量,即tagscategories 包含复杂的值,例如数组、结构等,不能用cfoutput 显示。您要么需要将这些数组转换为简单值,as suggested below 要么遍历复杂对象,即数组并输出每个元素(假设数组元素是简单字符串)。
  • 顺便说一句,在 CF11 中您可以使用数组循环,即 &lt;cfloop array=".." ....&gt; 而不是 from/to 循环。

标签: json multidimensional-array coldfusion coldfusion-11


【解决方案1】:

TAGS 和 CATEGORIES 是数组。您可以使用ArrayToList 函数将它们转换为字符串。

试试这个:

#ArrayToList(Course.tags)# <br>
#ArrayToList(Course.categories)# <br>

【讨论】:

  • 另外,如果这只是为了调试目的以确保你得到所有东西,用&lt;cfdump var="#Course#"&gt;替换所有这些会更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多