试图用另一组结构包裹一个结构

trying to wrap a structure with another set of structure

我正在尝试用另一个结构包裹一个结构,但我确实遗漏了一些东西

我想这样展示

account: {
    "name": "Example Account",
    "details": "https://www.example.com"
  }

我正在尝试这个功能,但我遗漏了一些东西,可能我应该使用 structmap,不确定

<cffunction name="SO">
    <cfargument name="name" required="true" type="struct">
    <cfargument name="data" required="true" type="struct">
    <cfloop collection="#arguments.Data#" index="i">
        <cfset arguments.Name['#lcase(i)#'] = arguments.Data[i]>
    </cfloop>   
    <cfreturn arguments.Name>
</cffunction>

当我第一次看到它时,我认为您本质上想要一个新结构,其中包含一个 "name"(包含一个字符串)和一个包含一个结构的 "data"。

您的初始设置基本上是

<cfset name = "Test" >
<cfset data = { details: "detail1" , details2: "detail2" } >

在处理 CF 中的大多数数据结构时,我通常发现使用 CFSCRIPT 而不是标签更容易和更清晰。所以我想出了

<cfscript>
    function SO ( required String name, required Struct data ) {
        var retval = { name:"",data:{} } ;

        retval.name = arguments.name ;

        arguments.data.map( function(key, val) {
            retval.data[key.lcase()] = val ;
        } ) ;

        return retval;
    }

    writedump( SO(name,data) ) ;
</cfscript>

为了解决这个问题,您似乎只是想在 "data" 结构中添加一个 "name" 值。这可以通过

轻松完成
<cffunction name="SO_tags">
    <cfargument name="name" required="true" type="string">
    <cfargument name="data" required="true" type="struct">

    <cfset retval2 = arguments.data >
    <cfset retval2.name = arguments.name>
    <cfreturn retval2>
</cffunction>

<cfset structure = {"account":SO_tags(name,data)}>
<cfdump var = #structure#>

或者使用脚本,它可以简化为一行。

<cfscript>
    function SO3 ( required String name, required Struct data ) {
        return arguments.data.append( {"name":arguments.name} ) ;
    }

writedump( {"account":SO3(name,data)} ) ;
</cfscript>

根据这如何适合您的其余代码,您甚至可能不需要函数。

https://cffiddle.org/app/file?filepath=b6e92a83-ebc9-40eb-a712-f402d7f9ed85/f4fb9f8e-3b60-4a64-8c02-2cd106736df0/4e00abae-b949-4934-86e8-870745259127.cfm

编辑:更改输出以将其嵌套在 "account" 结构中。