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

Javascript JSON.stringify转换对象';将属性名称转换为字符串,javascript,json,Javascript,Json,我有一件像这样的东西 var obj = { name: "foo", age: 23 }; for (i in obj) { if (obj[i] == "foo") { obj[i] = "bob"; } } {"name":"bob","age":23} 操作对象后 当使用JSON.stringify(obj)时,我得到如下输出 var obj = { name: "foo", age: 23 }; for (i in obj)

我有一件像这样的东西

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

for (i in obj) {
    if (obj[i] == "foo") {
    obj[i] = "bob";
  }
}
{"name":"bob","age":23}
操作对象后
当使用
JSON.stringify(obj)
时,我得到如下输出

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

for (i in obj) {
    if (obj[i] == "foo") {
    obj[i] = "bob";
  }
}
{"name":"bob","age":23}

但是我不需要objects属性作为字符串来转换为objects属性名。所以我需要这样的输出
{name:“bob”,age:23}
。如果我错了,请纠正我。

这看起来是正确的输出

在wiki中,示例看起来是相同的

在JS中,这根本不是问题

请看这个,将JSON字符串解析回一个对象


也许更明智的做法是告诉我们为什么需要从钥匙上取下双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 += "}";

正如阿尼鲁达所说。如果要删除键的双引号,则需要正则表达式。如下所示:

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

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

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

使用JSON.stringify(obj)解析对象不仅要读取属性值,还要读取属性名称,以便将对象转换为JSON字符串(例如package.JSON中的语法样式look,其中bouth属性和值具有parenthase)。对象属性成为字符串是因为对象已字符串化,因此如果不希望属性成为字符串,请在对象上使用JSON.stringify()

将属性作为字符串有什么不对?这是json格式bro。我知道将属性作为字符串没有问题。但是我需要输出格式,就像我在问题中问的那样,为什么不把对象字符串化呢???@htoniv-对于
JavaScript
对象,键总是
字符串
。。总是…很抱歉回答我自己的问题。但是如果不使用regExp,我需要解决方案,我知道JSON.stringify会将键值转换为字符串。但是我不需要这样的输出。请理解我的问题。