2012-02-10 192 views
1

我正在编写一个在node.js中的API,它从数据库中提取数据,对其进行处理并将其发送出去以供使用。如何防止在对对象进行字符串化时对数字进行字符串化?

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

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

当我打电话JSON.stringify,并通过上述的目的,我得到这个:

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

我想一个字符串,其中数字键不会变成字符串。我该怎么做呢?

+0

如果你想使用JSON,你将不得不忍受它。 – kapa 2012-02-10 11:51:59

回答

0

你可以测试每个键/值是否为字符串化的整数这样的:

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

注意:这里故意,而不是使用===因为==我们既想强迫字符串。

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

我会指出,如果你将这个json发送到浏览器或其他javascript客户端,除非你总是使用===,否则无论你是int还是string都不会有什么区别。

+0

如果它对浏览器没有影响,那么我就可以使用字符串了。 – 2012-02-10 18:44:32

1

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

console.log(typeof(Object.keys(myObj)[0])); 
1

引用的JSON syntax你会发现,这些数字键是从string: value对事实的字符串:

您可以在此之前系列化的验证。解析器是宽松的,并将它们转换为string

作为对象的符号,你的标识被一些将是有点奇怪,无论如何,例如,如果你有一个对象myFridge,这将是一些等价的:

myFridge.2734899508 = "Chicken" // WRONG 

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

myFridge["2734899508"] = "Chicken" 

你可以考虑其他的东西像阵列严格保持数字,例如:

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

可能代表您的数据好一点。

相关问题