【问题标题】:How to prevent stringification on an number when stringifying an object?对对象进行字符串化时如何防止对数字进行字符串化?
【发布时间】:2012-02-10 09:26:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 如果你想使用 JSON,你将不得不忍受它。

标签: javascript json node.js


【解决方案1】:

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

【讨论】:

  • 但我认为Object.keys(myObj)[0] 无论如何都会将数字转换为字符串,所以这也可能不正确......
  • 你是对的..我在 7.5 年前没有测试过这个.:D.
【解决方案2】:

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

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

myFridge.2734899508 = "Chicken" // WRONG

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

myFridge[2734899508] = "Chicken"

您可以考虑使用其他东西(例如数组)来严格保存数字,例如:

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

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

【讨论】:

    【解决方案3】:

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

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

    注意:这里故意使用== 而不是===,因为我们希望将两者都强制转换为字符串。

    但是,如果您知道哪些键/值是字符串化整数,那么您只需执行中间行来修复它们。

    我要指出的是,如果您将此 json 发送到浏览器或其他 javascript 客户端,那么无论您使用的是 int 还是 string 都不会有什么不同,除非您总是使用 ===

    【讨论】:

    • 如果它对浏览器没有影响,那么我可以使用字符串。
    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多