JSON.stringify是否保留数组中对象的顺序

时间:2014-06-16 11:16:52

标签: javascript json

我正在创建一个javascript对象,如下所示

var myObjects ; 
for(var i = 0; i <10;i++){
    var eachObject = {"id" : i};
    myObjects .push(eachObject );
}
message = {
      "employeeDetails" : myObjects 
}

在此之后我将它们按字符串化如下

JSON.stringify(message);

上述方法是否按照先前的顺序对对象进行字符串化? 在stringify之后,它们将按照之前的顺序为0,1,2 .... 9?

3 个答案:

答案 0 :(得分:12)

文档中没有任何内容明确确认数组项的顺序是保留的。但是,文档声明对于非数组属性,无法保证顺序:

  

不保证非数组对象的属性按任何特定顺序进行字符串化。不要依赖于字符串化内同一对象内的属性排序。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

即使数组项的顺序会被保留,我也不会指望这个,而是自己对项目进行排序。毕竟,很可能会有一些业务或表示逻辑指示如何对项目进行排序。

答案 1 :(得分:4)

您可以使用sort method.

对数组进行排序

是的,stringify保留了订购。

jsfiddle

var cars = ["Saab", "Volvo", "BMW"];
cars.push("ferrari");
alert(JSON.stringify(cars));
cars.sort();
alert("sorted cars" + JSON.stringify(cars));

答案 2 :(得分:1)

对于从JSON.stringify()中以特定顺序获取顶级对象的简单方法,您可以使用:

const str = JSON.stringify(obj, Object.keys(obj).sort());

作为replacer传递的键[]的顺序决定了结果字符串中的顺序。

请参阅:https://dev.to/sidvishnoi/comment/gp71和“排序对象属性和JSON.stringify”-https://www.tfzx.net/article/499097.html

另一种更严格的方法是:https://github.com/develohpanda/json-order

并且:https://www.npmjs.com/package/fast-json-stable-stringify将按键顺序输出。您还可以使用自己的排序顺序功能。

经过大量Google搜索后,我发现了这一点。