JSON字符串转换为JavaScript对象,如何保持属性顺序?

3 阅读1分钟

JSON字符串转换为JavaScript对象,如何保持属性顺序?

背景

当后端返回有序的JSON字符串对象时,我们需要确保在将其转换为JavaScript对象时,属性顺序得以保持。

已知条件

JavaScript的JSON.parse方法在默认情况下不保证对象属性的顺序,特别是当键为纯数字时。例如:

JSON.parse('{"2":2,"1":1,"ab":"ab","ba":"ba","b":"b","a":"a"}')
//  {1: 1, 2: 2, ab: 'ab', ba: 'ba', b: 'b', a: 'a'}
// 从上面代码可知数字是无序的
​
JSON.parse('{"a ":"a ","ba":"ba","b":"b","a":"a"}')
// {"a ": 'a ', ba: 'ba', b: 'b', a: 'a'}
// 从上面代码可知非数字开头是有序的
​
JSON.parse('{"2a":2,"1a":1}')
// {2a: 2, 1a: 1}
// 从上面代码可知纯数字是无序的,非纯数字是有序的

综上所述,仅在键值为纯数字时,顺序问题才需要被考虑。

为了实现对数值的有序排序,一个高效的方法是将其转换为非数值形式进行存储。其中,最简单快捷的方式是在存储键值时添加空格,例如"1 ""2 "等,以实现排序的目的。