将名称值对转换为struct

时间:2016-06-06 21:29:42

标签: web-services coldfusion coldfusion-8

自从我编写了这种类型的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中做到这一点吗?我发现的大部分内容都是指新版本。

2 个答案:

答案 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>