序列化对象在再次序列化时是否包含相同的json内容(crossbrowser case)

时间:2014-09-29 21:35:54

标签: javascript json serialization cross-browser

我需要在源对象和目标对象之间执行深度对象比较,这些对象非常特定于我的用法并且也很复杂。但是如果有可能比较对象的json表示,我可以简化一些事情。我的意思是,如果保证在序列化后保留属性的顺序。换句话说,有两个对象:

{ a: "a", b: "b" }{ b: "b", a: "a" }内容相同但json表示不同。

有两种情况可以通过以下代码片段来描述:

第一个:

var json = '{"a":"a","b":"b"}';
var x = JSON.parse(json);
var y = JSON.parse(json);
var comparison = JSON.stringify(x) === JSON.stringify(y); // will it always be true?

第二个:

var json = '{"a":"a","b":"b"}';
var x = JSON.parse(json);
var y = JSON.parse(json);

delete y.a;
delete y.b;

y.b = "b"; // Notice the order is changed
y.a = "a"; // Notice the order is changed

var comparison = JSON.stringify(x) === JSON.stringify(y); // will it always be true?

问题:

  • 对于所有浏览器,两种情况都是如此吗?
  • 是否还有其他可以制作JSON.stringify(x)的场景!== JSON.stringify(y)
  • 有没有办法通过实现自己的序列化技术来实现之前描述的保证(例如序列化前的排序属性)

就是这样,谢谢!

1 个答案:

答案 0 :(得分:0)

在这里,我分叉并修改了JSON 3实现,以支持带有排序对象键的JSON内容,希望它能帮助某人https://github.com/lu4/jsons