ColdFusion不会保留将元素分配给结构的顺序。在我的特定情况下,当我需要从该结构创建SOAP信封并且接收者需要以特定顺序在信封中进行数据处理时,这会带来问题。从ColdFusion 2016及更高版本开始,StructNew()方法中提供了一个“类型”选项,您可以在其中指定“订购”。不幸的是,我仍然使用CF9.02 ...例如(在CF9中):
<cfscript> myStruct=StructNew(); myStruct.one=StructNew(); myStruct.one.item1="Old Trafford"; myStruct.one.item2="Anfield"; myStruct.two=StructNew(); myStruct.two.item3="Stamford Bridge"; myStruct.two.item4="Villa Park"; myStruct.three=StructNew(); myStruct.three.item5="St James Park"; myStruct.three.item6="Emirates Stadium"; WriteDump(myStruct); </cfscript>
输出:
{"ONE":{"ITEM2":"Anfield","ITEM1":"Old Trafford"},"THREE":{"ITEM6":"Emirates Stadium","ITEM5":"St James Park"},"TWO":{"ITEM4":"Villa Park","ITEM3":"Stamford Bridge"}}
如您所见,订单被打乱了。
第二个问题是大写。所有项目都转换为大写...对于SOAP信封,这是一个问题,因为它区分大小写。
ColdFusion不会保留将元素分配给结构的顺序。在我的特殊情况下,这需要我从该结构创建SOAP信封,并且...
订单。解决方案是使用Java LinkedHashMap,它可以像ColdFusion中的结构一样使用。所以,我只需要更换StructNew();
与:createObject("java", "java.util.LinkedHashMap").init();