自从我编写了这种类型的ColdFusion代码以来,已经有一段时间了,因此问题就出现了。
我将.NET Web服务中的值返回到ColdFusion中。 webservice返回一个字符串数组。以下代码......
<cfoutput>
<cfset xArrayItems=#GetRequestedUserSettings.settingValues.getString()#>
<cfset xLen=ArrayLen(GetRequestedUserSettings.settingValues.getString())>
<cfloop index="x" from=1 to="#xLen#">
#xArrayItems[x]#<br />
</cfloop>
</cfoutput>
产生以下输出......
maxsize=50
isdomainadmin=False
seenwelcome=False
我想将这些名称/值对放入一个有意义的结构中,以便我可以在代码中进一步引用它们。我实际上需要将它们作为cfinvokearguments传递给下一个webservice调用。
有人可以提醒我如何在CF8中做到这一点吗?我发现的大部分内容都是指新版本。
答案 0 :(得分:7)
我最终得到的东西与你提供的@Henry非常相似。
<cfset UserSettings = structNew()>
<cfset xArrayItems= GetRequestedUserSettings.settingValues.getString()>
<cfset xLen=ArrayLen(GetRequestedUserSettings.settingValues.getString())>
<cfloop index="x" from=1 to="#xLen#">
<cfset varName = ListGetAt(xArrayItems[x], 1, "=")>
<cfset varValue = ListGetAt(xArrayItems[x], 2, "=")>
<cfset "UserSettings.#varname#" = varValue>
</cfloop>
不确定数组或结构是否是更好的解决方案,但两者都有效。
答案 1 :(得分:1)
我可以提出的更易读的版本将适用于CF8:
<cfset UserSettings = {}>
<cfset xArrayItems = GetRequestedUserSettings.settingValues.getString()>
<cfloop array="#xArrayItems#" index="item">
<cfset varname = ListFirst(item, "=")>
<cfset varvalue = ListRest(item, "=")>
<cfset UserSettings[varname] = varvalue>
</cfloop>