我是CFML语言的新手,我对ColdFusion中的结构和数组有疑问。请注意,我正在使用openBD CFML服务器。
我有以下对象(struct):
{
"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”)。为了完成上述任务,有没有指导研究? 任何帮助表示赞赏!
答案 0 :(得分:1)
你的意思是你想把结构变成一个阵列吗?如果是,那么是的,你可以这样做。但是,结构没有固有的顺序,因此您无法保留订单。您的结果可能会以相同的顺序出现,但没有特别的理由说明原因。
基本上你想创建一个新的空数组:[]。然后遍历docs中的键(使用cfloop collection =“...”)。对于每个键,将结构附加到数组,因此结果是一组结构。然后将其插入原始变量中。没有变量名称就无法具体。
答案 1 :(得分: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)#">
答案 2 :(得分:0)
您绝对可以在上面的代码中执行您想要执行的操作。最终会得到一个名为doc的数组,其中每个索引都包含一个带有ID键和LOLA键的结构。如果这是您想要的,那么上面的代码将起作用。
我会说你的数据结构看起来可能会受益于其他东西 - 可能是一个查询对象。但也许xml或json也是一个不错的选择。它看起来有点折磨:)