如何在对对象进行字符串化时防止对数字进行字符串化
How to prevent stringification on an number when stringifying an object?
我正在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还是一个字符串,都不会有什么区别,除非你总是使用===
。
相关文章:
- Javascript逻辑运算符和字符串/数字
- Javascript排序字符串或数字
- 制作一个regex来验证只有一个数字的字符串
- 将数字转换为字符串数字
- 将HTML(支持文件)中的令牌(字符串、数字等)传递给LogiXML
- 如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 从JS中的字符串中读取数字的库
- 字符串数字-从123456转换为123456
- JavaScript如何面对字符串数字工作
- 将字符串数字的格式设置为货币
- Javascript:如何检索*字符串*数字的小数位数
- 试图理解无法在JavaScript中改变字符串/数字的概念
- Javascript没有使用parseInt函数添加两个字符串数字
- 在jQuery中将整数格式化为字符串数字
- Regex格式字符串数字与逗号和2个小数在javascript
- 如何使用javascript排序字符串数字
- 转换'字符串数字'到一个数字
- 检查字符串/数字类型的字段是否为空
- JavaScript:将字符串/数字转换为数字或null,0返回0