actionscript 3 - AS3问题解码JSON数据从PHP


actionscript 3 - AS3 Problem with decoding JSON data from PHP

我可以通过以下代码将JSON数据从PHP拉到我的Flex应用程序中:

public function httpResult(event:ResultEvent):void { 
    var rawData:String = String(event.result);
    trace(String(event.result)); //shows correct order
    var as3Data:Object = JSON.decode(rawData);
    for (var i:* in as3Data)  {
        trace(i + ": " + as3Data[i].unit_price); //shows incorrect order
    }
}

当我跟踪结果时,我看到我以正确的顺序提取的信息。

{" 100 ":{"unit_price":"2.9567"},"400":{"unit_price":"1.0991"},"800":{"unit_price":"0.7926"},"1200":{"unit_price":"0.6911"}}{

但是,一旦我json .解码结果,它会以某种方式重新排序内容。并且,将第一项放在最后。

400: 1.0991,800: 0.7926,1200: 0.6911,100:

2.9567

有人知道为什么它会这样做吗?或者关于如何自己重新排序对象的想法?

AS3中的对象没有排序。JSON键值对显然有一个排序(它在文本中!),但我不认为有任何保证它将保持JSON编码或解码。

如果您有特定的排序要求,您可能应该创建一个包含对象的列表:

[
    {"100":{"unit_price":"2.9567"}},
    {"400":{"unit_price":"1.0991"}},
    {"800":{"unit_price":"0.7926"}},
    {"1200":{"unit_price":"0.6911"}}
]

在大多数情况下,Andrew的回答是正确的,因为AS3中的对象是不有序的。但是我不会创建一个对象列表;相反,我将创建一个用于索引JSON对象的键列表。这样就很容易对键列表进行排序。

我得到的代码是这样的:

var as3Data:Object = JSON.decode(rawData);
var keys:Array = [];
for (var i:* in as3Data)  {
  keys.push(i);
}
keys.sort();  //don't know the correct sort off the top of my head, sorry
for (var key:* in keys) {
  trace(key + ":" + as3Data[key].unit_price);
}