string化对象时如何防止对数字进行string化?
我正在写node.js
中的一个API,它从数据库中提取数据,操纵它,并将其发送给客户。
我有一个像这样的对象:
{ 2734899508: "Chicken", 2843594878: "Fish" }
当我调用JSON.stringify并通过上述对象,我得到这个:
{ "2734899508": "Chicken", "2843594878": "Fish" }
我想要一个string的数字键不变成string。 我该怎么做呢?
你可以testing每个键/值是否是一个string化的整数:
if(parseInt(value)==value) { value = parseInt(value); }
注意:在这里故意使用==
而不是===
因为我们要强制两个string。
但是,如果你知道哪些键/值是string整数,那么你可以做中间行来修复它们。
我会指出,如果你发送这个JSON到浏览器或其他JavaScript客户端,它不会有真正的区别,无论你有一个int或一个string,除非你总是使用===
。
作为对象键的数字不被支持,它们将被转换为一个string键,你有我猜数字的错觉,因为当你做myObj [2843594878]它会返回正确的值,但在访问器上它也将它转换为串。
您可以在序列化之前通过
console.log(typeof(Object.keys(myObj)[0]));
引用JSON语法,你会发现这些数字键实际上是来自string: value
对的string: value
。 parsing器是宽松的,并将其转换为string
。
作为一种对象符号,无论如何,你的标识符是一个数字,例如,如果你有一个对象myFridge
,它将等同于:
myFridge.2734899508 = "Chicken" // WRONG
不过,正如其他人指出的那样,您仍然可以使用括号语法:
myFridge["2734899508"] = "Chicken"
你可以考虑像数组等其他东西严格保持数字,例如:
{ fridgeItems: [ [ 2734899508, "Chicken" ], [ 2843594878, "Fish" ] ] }
可能代表你的数据好一点。