如何在对对象进行字符串化时防止对数字进行字符串化

How to prevent stringification on an number when stringifying an object?

本文关键字:字符串 数字 对象      更新时间:2023-09-26

我正在node.js中编写一个API,它从数据库中提取数据,对其进行操作,并将其发送出去以供消费。

我有一个看起来像这样的对象:

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

当我调用JSON.stringify并传递上述对象时,我得到的是:

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

我想要一个数字键没有变成字符串的字符串。我该怎么做?

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

引用JSON语法,您会发现这些数字键实际上是来自string: value对的字符串。解析器很宽容,并将它们转换为string

作为一个对象表示法,你的标识符是一个数字,无论如何都会有点奇怪,例如,如果你有一个对象myFridge,它将相当于:

myFridge.2734899508 = "Chicken" // WRONG

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

myFridge[2734899508] = "Chicken"

你可以考虑像数组这样的其他东西来严格保存数字,例如:

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

可能会更好地代表您的数据。

您可以测试每个键/值是否是字符串化整数,因此:

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

注意:这里有意使用==而不是===,因为我们想将两者都强制为字符串。

但是,如果知道哪些键/值是字符串化的int,那么您可以只做中间一行来修复它们。

我想指出的是,如果你将这个json发送到浏览器或其他javascript客户端,那么无论你有一个int还是一个字符串,都不会有什么区别,除非你总是使用===