2017-02-14 46 views
0
var obj:Object = {a:"foo", b:"bar", c:"baz", d:"qux"}; 
trace(JSON.stringify(obj)); 

什麼決定了該對象的值被添加到JSON字符串的順序?(AS3)來自對象的確定性JSON字符串?

我需要JSON始終完全相同,所以我不能讓它們處於不同的順序,它們似乎跨越不同的客戶端。

上下文:我哈希JSON字符串,並比較服務器上的散列,以確定客戶端是否desynced。

+1

不會用泛型對象工作,因爲Flash Player將它們列舉爲藍色。然而,你可以去代理類和它的代理方法nextName(),並只是**可能**解決你的問題:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils /Proxy.html#nextName()。否則,你將不得不編寫自己的stringify()方法,這並不困難。 – Organis

+0

我對Proxy類不熟悉。我給了參考資料一個鏡頭,但它有點凌駕於我的頭上。我想我會寫我自己的stringify()方法。 –

回答

3

您不能依賴JSON對象鍵以任何順序。如果你想創建一個一致的散列,你需要將鍵排序成一個數組並且散列表示:

var fields:Array = []; 
for (var key:String in obj) { 
    fields.push({key: key, value: obj[key]}); 
} 
fields.sortOn("key"); 
hash(fields);