如何在nodejs中保持JSON数字键的顺序

问题描述 投票:0回答:4
var json = `{"3":0,"2":0,"1":0}`
var obj = JSON.parse(json)
console.log(JSON.stringify(obj))
console.log(json === JSON.stringify(obj))

产量

{"1":0,"2":0,"3":0}
false

我期待得到它

{"3":0,"2":0,"1":0}
true

怎么做

javascript node.js json
4个回答
3
投票

这是因为json是解析后的对象,并且不保证对象的键是有序的

你可以使用map&it guarantees the order of the keys


1
投票

那是不可能的。在ES6中,按以下顺序遍历键:

  • 首先,作为整数索引的键,按升序数字顺序排列。
  • 然后,所有其他字符串键,按照它们添加到对象的顺序。
  • 最后,所有符号键,按照它们添加到对象的顺序。

整数键按升序排序,而不管它们的插入顺序如何

var a = {};
a[3] = "three"
a[2] = "two"
a[1] = "one"

console.log(JSON.stringify(a))

Reference

您可能还想阅读:Does JavaScript Guarantee Object Property Order?


0
投票

您可以使用具有guid属性的对象数组

const text = '[{"id":3,"value":0},{"id":2,"value":0},{"id":1,"value":0}]'

const json = JSON.parse(text)

console.log(JSON.stringify(json))

0
投票

您可以将密钥用于点,并且通过iteratong这些密钥是在原始插入顺序中,但不能仅使用数字访问。这也需要一个点。

var json = `{"3.":0,"2.":0,"1.":0}`
var obj = JSON.parse(json)

console.log(obj[2])
console.log(JSON.stringify(obj))
console.log(json === JSON.stringify(obj))
© www.soinside.com 2019 - 2024. All rights reserved.