Javascript 在串接对象时,如何防止数字串接?

Javascript 在串接对象时,如何防止数字串接?,javascript,json,node.js,Javascript,Json,Node.js,我正在node.js中编写一个API,它从数据库中提取数据,对其进行操作,并将其发送出去以供使用 我有一个像这样的对象: { 2734899508: "Chicken", 2843594878: "Fish" } 当我调用JSON.stringify并传递上述对象时,我得到以下结果: { "2734899508": "Chicken", "2843594878": "Fish" } 我想要一个字符串,其中数字键不转换为字符串。如何执行此操作?您可以测试每个键/

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

我有一个像这样的对象:

{
    2734899508: "Chicken",
    2843594878: "Fish"
}
当我调用JSON.stringify并传递上述对象时,我得到以下结果:

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

我想要一个字符串,其中数字键不转换为字符串。如何执行此操作?

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

if(parseInt(value)==value) {
    value = parseInt(value);
}
注意:在这里有意使用
==
,而不是
==
,因为我们想强制两者都使用字符串

但是,如果您知道哪些键/值是字符串化的int,那么只需执行中间行即可修复它们


我要指出的是,如果您将此json发送到浏览器或其他javascript客户端,那么您是否具有int或string实际上没有什么区别,除非您始终使用
==

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

引用时,您会发现这些数字键实际上是
string:value
对中的字符串。解析器非常宽松,将它们转换为
字符串

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

myFridge.2734899508 = "Chicken" // WRONG
但是,正如其他人指出的那样,您仍然可以使用方括号语法:

myFridge[2734899508] = "Chicken"

你可以考虑数组之类的其他事物来严格地保存数字,例如:

{
fridgeItems:[
[2734899508,“鸡肉”],
[2843594878,“鱼”]
]
}

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

如果您想使用JSON,您将不得不接受它。如果它对浏览器没有影响,那么我可以使用字符串。但我认为
Object.keys(myObj)[0]
无论如何都会将数字转换为字符串,因此这可能也不正确……您是对的。。7.5年前我没有测试过这个。