我正在node.js
编写一个API,它从数据库中提取数据,对其进行操作,然后将其发送给消费者。
我有一个看起来像这样的对象:
{
2734899508: "Chicken",
2843594878: "Fish"
}
当我调用JSON.stringify并传递上述对象时,我得到了这个:
{
"2734899508": "Chicken",
"2843594878": "Fish"
}
我想要一个字符串,其中数字键不会变成字符串。我该怎么做?
答案 0 :(得分:1)
数字作为对象键不受支持,它们将被转换为字符串键,你有数字幻觉我猜是因为当你做myObj [2843594878]时它会返回正确的值,但是在访问器上它也是转换这到一个字符串。
您可以在序列化之前通过以下方式验证:
console.log(typeof(Object.keys(myObj)[0]));
答案 1 :(得分:1)
引用JSON syntax您会发现这些数字键实际上是来自string: value
对的字符串。解析器很宽松并将它们转换为string
。
作为对象表示法,无论如何,您的标识符是一个数字有点奇怪,例如,如果您有一个对象myFridge
,它将等同于:
myFridge.2734899508 = "Chicken" // WRONG
但是,您仍然可以使用括号语法,正如其他人指出的那样:
myFridge["2734899508"] = "Chicken"
您可以考虑使用数组之类的其他内容来严格保存数字,例如:
{
fridgeItems:
[
[ 2734899508, "Chicken" ],
[ 2843594878, "Fish" ]
]
}
可能会更好地代表您的数据。
答案 2 :(得分:0)
您可以测试每个键/值是否为字符串化整数:
if(parseInt(value)==value) {
value = parseInt(value);
}
注意:在这里有意使用==
而不是===
,因为我们想要将两者强制为字符串。
但是,如果您知道哪些键/值是字符串化的整数,那么您可以只做中间线来修复它们。
我想指出,如果你将这个json发送到浏览器或其他javascript客户端,除非你总是使用===
,否则你是否有一个int或一个字符串并没有什么区别。