1

我是 CFML 语言的新手,我对 ColdFusion 中的结构和数组有疑问。请注意,我使用的是 openBD CFML 服务器。

我有以下对象(结构):

{
   "docs":{
      "23_id":{
         "content":[
            "I am"
         ]
      },
      "1_id":{
         "content":[
            "the most"
         ]
      },
      "7_id":{
         "content":[
            "crap coder"
         ]
      },
      "39_id":{
         "content":[
            "in the whole universe!"
         ]
      }
   }
}

问题:我可以将上述对象修改为(如果可能,还保留订单):

{
    "docs": [
        {
            "id": "23_id",
            "lola": "I am"
        },
        {
            "id": "1_id",
            "lola": "the most"
        },
        {
            "id": "7_id",
            "lola": "crap coder"
        },
        {
            "id": "39_id",
            "lola": "in the whole universe!"
        }
    ]
}

请注意,我需要分配自定义键(id并分配“lola”而不是“content”)。为了完成上述任务,是否有任何学习指针?任何帮助表示赞赏!

4

3 回答 3

1

很简单,创建一个新数组,循环你的结构,然后像这样追加数组:

<cfset str = {
   "docs":{
      "23_id":{
         "content":[
            "I am"
         ]
      },
      "1_id":{
         "content":[
            "the most"
         ]
      },
      "7_id":{
         "content":[
            "crap coder"
         ]
      },
      "39_id":{
         "content":[
            "in the whole universe!"
         ]
      }
   }
}>

<cfset docs = { docs: []}>

<cfloop collection="#str.docs#" item="itm">
    <cfset arrayAppend( docs.docs, {id: itm, lola: str.docs[itm].content[1]} )>
</cfloop>

<cfdump var="#serializeJson(docs)#">
于 2018-01-15T22:57:29.760 回答
0

你的意思是你想把结构变成一个数组吗?如果是这样,那么是的,你可以这样做。但是,结构没有固有的顺序,因此您不能保留顺序。您的结果可能以相同的顺序出现,但没有特别的原因。

基本上你想创建一个新的空数组:[]。然后遍历文档中的键(使用 cfloop collection="...")。对于每个键,将一个结构附加到您的数组,因此您的结果是一个结构数组。然后将其插入原始变量中。没有变量名就不能具体。

于 2012-08-04T09:53:59.977 回答
0

你绝对可以在上面的代码中做你说你想做的事情。您最终将得到一个名为 doc 的数组,其中每个索引将包含一个带有 in ID 键和一个 LOLA 键的结构。如果这是您想要的,那么您上面的代码将起作用。

我会说您的数据构造看起来可能会受益于其他东西 - 可能是查询对象。但可能 xml 或 json 也是一个不错的选择。它看起来有点折磨:)

于 2012-08-04T17:05:58.360 回答