Javascript 按Asc顺序字符串化JS对象
我有一个js对象,比如Javascript 按Asc顺序字符串化JS对象,javascript,json,object,Javascript,Json,Object,我有一个js对象,比如 { a: 1, b: 2, c: 3 } 我想以相同的顺序使用JSON.stringify对上述对象进行字符串化。也就是说,stringify应该返回如下字符串 "{"a":"1", "b":"2", "c":"3"}" 但是如果我的js对象有太多属性,比如超过500个,它会像下面一样返回给我 "{"b":"2", "a":"1", "c":"3"}" 有没有任何选项可以让我的js对象的json字符串在asc中排序。如果顺序对你很重要,不要使用json。
{
a: 1,
b: 2,
c: 3
}
我想以相同的顺序使用JSON.stringify对上述对象进行字符串化。也就是说,stringify应该返回如下字符串
"{"a":"1", "b":"2", "c":"3"}"
但是如果我的js对象有太多属性,比如超过500个,它会像下面一样返回给我
"{"b":"2", "a":"1", "c":"3"}"
有没有任何选项可以让我的js对象的json字符串在asc中排序。如果顺序对你很重要,不要使用json。stringify因为使用它的顺序不安全,你可以使用javascript创建json stringify,要处理字符串值,我们有两种不同的方法,首先,使用regexp替换无效字符或对我们的值使用
JSON.stringify
,例如,如果我们有一个类似'abc\d“efg'
的字符串,我们只需得到正确的结果JSON.stringify('abc\d“efg')
,因为此函数的全部思想是按照正确的顺序进行stringify:
function sort_stringify(obj){
var sortedKeys = Object.keys(obj).sort();
var arr = [];
for(var i=0;i<sortedKeys.length;i++){
var key = sortedKeys[i];
var value = obj[key];
key = JSON.stringify(key);
value = JSON.stringify(value);
arr.push(key + ':' + value);
}
return "{" + arr.join(",\n\r") + "}";
}
var jsonString = sort_stringify(yourObj);
JavaScript对象按定义是无序的(您可以参考第8.6节中的ECMAScript语言规范) 语言规范甚至不能保证,如果你连续两次迭代一个对象的属性,第二次它们将以相同的顺序出现 如果仍然需要排序,请将对象转换为数组并对其应用任何排序算法,然后对排序后的数组执行JSON.stringify() 下面我们举一个例子:
var data = {
one: {
rank: 5
},
two: {
rank: 2
},
three: {
rank: 8
}
};
var arr = [];
推入数组并对其应用排序,如下所示:
var mappedHash = Object.keys( data ).sort(function( a, b ) {
return data[ a ].rank - data[ b ].rank;
}).map(function( sortedKey ) {
return data[ sortedKey ];
});
然后应用JSON.stringy:
var expectedJSON = JSON.stringify(mappedHash);
输出将是:
"[{"rank":2},{"rank":5},{"rank":8}]"
对象中属性的顺序没有指定,也不应该很重要。我得到的顺序与您预期的相同。检查顺序对您是否重要,找出如何将数据结构表示为数组。您可以在输出数据结构时对其进行排序。使用
对象获取键。键
,对它们进行排序,然后循环并访问对象的属性。要对对象进行排序,可以检查post:如果我更改此行arr.push(“+sortedKeys[i]+”:“+obj[sortedKeys[i]]+”);到arr.push(““'+sortedKeys[i]+”:“'+obj[sortedKeys[i]]+”);非常感谢。并且,arr.join(“,\n\r”)在每行上都有每个属性。非常感谢如果sortedKeys[i]
本身包含一个引号,它肯定可以:var x={};x['“']=2;console.log(x);
@Blender:我修复了它,你现在可以用“
试试。
"[{"rank":2},{"rank":5},{"rank":8}]"