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

Aru*_*hul 6 javascript json

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

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

在此之后,我按如下方式对它们进行串联

JSON.stringify(message);
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*man 12

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

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

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

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

  • 非数组明确是非有序的,这意味着数组是有序的. (3认同)
  • 人们可以认为这是肯定的,但没有明确说明,所以我对此持谨慎态度。如果文档中提到这一点那就太好了。 (2认同)

Nim*_*sky 5

您可以使用sort 方法对数组进行排序。

是的 stringify 保留排序。

提琴手

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

  • 根据我的经验,JSON.stringify 有时会改变数组中元素的顺序。 (3认同)

nev*_*evf 5

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

const str = JSON.stringify(obj, Object.keys(obj).sort());
Run Code Online (Sandbox Code Playgroud)

传递的键 []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将按关键顺序输出。您还可以使用自己的排序顺序功能。

我在大量谷歌搜索后发现了这一点。

  • 这不会对嵌套对象的键进行排序——这一点要记住。 (6认同)