string化对象时如何防止对数字进行string化?

我正在写node.js中的一个API,它从数据库中提取数据,操纵它,并将其发送给客户。

我有一个像这样的对象:

 { 2734899508: "Chicken", 2843594878: "Fish" } 

当我调用JSON.stringify并通过上述对象,我得到这个:

 { "2734899508": "Chicken", "2843594878": "Fish" } 

我想要一个string的数字键不变成string。 我该怎么做呢?

你可以testing每个键/值是否是一个string化的整数:

 if(parseInt(value)==value) { value = parseInt(value); } 

注意:在这里故意使用==而不是===因为我们要强制两个string。

但是,如果你知道哪些键/值是string整数,那么你可以做中间行来修复它们。

我会指出,如果你发送这个JSON到浏览器或其他JavaScript客户端,它不会有真正的区别,无论你有一个int或一个string,除非你总是使用===

作为对象键的数字不被支持,它们将被转换为一个string键,你有我猜数字的错觉,因为当你做myObj [2843594878]它会返回正确的值,但在访问器上它也将它转换为串。

您可以在序列化之前通过

 console.log(typeof(Object.keys(myObj)[0])); 

引用JSON语法,你会发现这些数字键实际上是来自string: value对的string: value 。 parsing器是宽松的,并将其转换为string

作为一种对象符号,无论如何,你的标识符是一个数字,例如,如果你有一个对象myFridge ,它将等同于:

 myFridge.2734899508 = "Chicken" // WRONG 

不过,正如其他人指出的那样,您仍然可以使用括号语法:

 myFridge["2734899508"] = "Chicken" 

你可以考虑像数组等其他东西严格保持数字,例如:

 { fridgeItems: [ [ 2734899508, "Chicken" ], [ 2843594878, "Fish" ] ] } 

可能代表你的数据好一点。