将名称值对转换为struct

Con*_*nko 2 coldfusion web-services 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>
Run Code Online (Sandbox Code Playgroud)

得到以下输出...

maxsize=50
isdomainadmin=False
seenwelcome=False
Run Code Online (Sandbox Code Playgroud)

我想将这些名称/值对放入一个有意义的结构中,以便我可以在代码中进一步引用它们.我实际上需要将它们作为cfinvokearguments传递给下一个webservice调用.

请问有人能够提醒我如何在CF8中做到这一点吗?我发现的大部分内容都涉及更新的版本.

Con*_*nko 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>
Run Code Online (Sandbox Code Playgroud)

不确定数组或结构是否是更好的解决方案,但两者最终都有效.

  • 做得好.一些提示:a)您还可以使用关联数组表示法来设置值,即`<cfset UserSettings [varName] = varValue>`和b)大多数列表函数忽略空元素.如果元素可以为空,则验证`listLen()`是> = 2或使用`getToken()`,如果元素不存在则不会抛出错误. (2认同)