反序列化json中包含数组的结构的ColdFusion循环

pet*_*ton 1 arrays coldfusion json loops structure

反序列化的json->具有数组的Coldfusion结构

这是从https://www.googleapis.com/calendar/v3/users/me/calendarList检索到的Google日历数据。

响应使用JSON,因此我使用ColdFusion方法deserializeJson将其转换为CFML结构。

我无法弄清楚遍历此数据的语法。您会看到,在CFML结构中,“ items”是从Google返回的日历数组,每次尝试访问结构中的数组都会产生Java字符串转换错误或语法错误,这可能是因为我无法获得语法正确。

非常感谢您的帮助,非常感谢

Mar*_*ger 6

一些反复试验会有所帮助-您已经在旅途中。您已经转储的根对象,但是我们在这里将其表示为“ obj”转储的对象:

<cfset obj = deserializejson(googleCal)>
Run Code Online (Sandbox Code Playgroud)

第一层是一个结构,因此您可以按以下方式处理它们:

#obj.etag#  // this is a string
Run Code Online (Sandbox Code Playgroud)

项目包含一个数组。因此,您有items [1-n] ...,但是数组中有很多。此代码会将myArrayObj设置为包含3个项目的数组(基于上述转储)。

<cfset myArrayObj = obj.items>
Run Code Online (Sandbox Code Playgroud)

您可以使用isArray进行验证:

#isArray(myArrayObj)#
Run Code Online (Sandbox Code Playgroud)

每个数组成员依次包含一个结构,因此您可以输出:

#myArrayObj[1].accessRole#  // this would be a string
Run Code Online (Sandbox Code Playgroud)

... 等等。请注意,数组中的索引项3是空白结构,因此在使用键之前,您需要“检查”该结构是否为空。为此,请调查“ structKeyExists()”。

如果要循环处理每个“项目”(一个非常典型的选择),则只需使用数组执行cfscript循环或cfloop即可,如下所示:

<cfloop array="#myArrayObj#" index="i">

    <cfif structKeyExists(myArrayOb[i], "accessRole")>
         #myArrayObj[i].accessRole#
    </cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。祝好运!

  • 谢谢,真的帮助了我,非常感谢 (2认同)