2017-02-14 21 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);