AS3从PHP解码JSON数据的问题

时间:2011-04-28 17:47:18

标签: php actionscript-3 flex4 json

我可以使用以下代码将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.decode结果,它会以某种方式重新排序内容。并且,将第一项放在最后。

  

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

有没有人对为什么会这样做有任何想法?或者我如何自己重新订购Object的想法?

2 个答案:

答案 0 :(得分:1)

AS3中的对象未订购。 JSON键值对显然有一个排序(它在文本中!),但我不认为当JSON被编码或解码时它将被保留。

如果您有特定的订购要求,您应该创建一个包含对象的列表:

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

答案 1 :(得分:0)

在大多数情况下,安德鲁的回答是正确的,因为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);
}