JSON.stringify将对象的属性名称转换为字符串

问题描述:

我有一个像这样的对象。JSON.stringify将对象的属性名称转换为字符串

var obj = { 
    name: "foo", 
    age: 23 
}; 

for (i in obj) { 
    if (obj[i] == "foo") { 
    obj[i] = "bob"; 
    } 
} 

使用JSON.stringify(obj)当我得到这样的输出操纵对象
后。

{"name":"bob","age":23} 

但我不需要对象属性作为字符串如何转换为对象属性名称。所以我需要这样的输出{name:"bob",age:23}。如果我错了,请纠正我。

+5

将属性设置为字符串有什么问题? –

+1

这是json格式bro。 – Anistark

+0

我知道将属性设置为字符串没有问题。但我需要的输出格式是像我问的问题 – htoniv

这看起来像是正确的输出。

在维基的例子看起来相同WIKI JSON

在JS这不应该是一个问题都没有。

请看看这个解析您的JSON字符串返回一个对象JSON.parse

也许这将是更聪明的,为什么你需要取消导航键双qoutes告诉我们。可能JSON不是问题,我会看看实现。

您不需要这样做,因为{"name":"bob","age":23}是有效的JSON。但是,如果你真的想删除关键的引号:

var json = JSON.stringify(obj); 
var keyVals = json.substr(1,json.length-2).split(/,/g); 

var output = "{"; 
keyVals.forEach(function(keyVal) { 
    var parts = keyVal.split(":"); 
    output += parts[0].replace(/"/g, ""); 
    output += ":"; 
    output += parts[1]; 
    output += ","; 
}); 

output = output.substr(0, output.length - 1); 

output += "}"; 

正如Anirudha说。如果你想删除键的双引号,你需要正则表达式。作如下:

JSON.stringify(obj).replace(/"([^"]*)":/g, '$1:') 

是的,我们可以使用正则表达式来解决这个问题

console.log(JSON.stringify({"name":"bob","age":23}).replace(/\"([^(\")"]+)\":/g,"$1:")) 
+0

很抱歉回答我自己的问题。但没有使用regExp我需要解决方案 – htoniv

+0

我知道JSON.stringify将键值转换为字符串。但我不需要这样的输出。请理解我的问题。 – htoniv

解析与JSON.stringify(OBJ)的对象不只是看你的财产价值,而且你的属性名称,以便将对象转换为JSON字符串(package.json中的示例语法样式,其中bouth属性和值具有父级)。你的对象属性变成了字符串,因为对象被字符串化了,所以如果你不想让属性成为字符串,就不要在对象上使用JSON.stringify()。