如何将JavaScript对象转换为字面字符串?

10
如果我拥有这个对象字面量:
{a: "hello"}

有没有 JavaScript 函数可以将该对象转换为字面字符串,以便输出的是字面语法:

'{a: "hello"}'

使用JSON.stringify,输出将会是:

'{"a": "hello"}'

1
一个问题是,一旦对象存在,就不可能知道在创建对象时(或添加后续属性时)标识符类似的属性名是如何表达的。它们可能有也可能没有引号。 - Pointy
1
不确定你的目标是什么,但你可以(滥用)使用JSON.stringify()... - Stuart
2
只是为了明确,{"a":"hello"} 是一个合法的字面对象表示,所以我不确定为什么 JSON 表示不足以满足您的目的。 - Paul
你需要这个做什么?如果我们知道你的使用情况,可能会建议一个合适的解决方案。 - Bergi
4
将服务器支持 JSON 而不是非标准数据格式可能是更好的选择。 - Quentin
显示剩余2条评论
4个回答

6
您可以使用 JSON.stringify,然后使用 String.replace 进行操作,如下所示:

var jsObj =
{
    abc: "hello",
    bca: "allo",
    cab: "dd:cc",
    d: ["hello", "llo", "dd:cc"],
    e: {abc: "hello", bca: "allo", cab: "dd:cc"}
};

function format(obj)
{
    var str = JSON.stringify(obj, 0, 4),
        arr = str.match(/".*?":/g);

    for(var i = 0; i < arr.length; i++)
        str = str.replace(arr[i], arr[i].replace(/"/g,''));

    return str;
}

console.log(format(jsObj));


谢谢你,Brahata。我花了一些时间来检查回复,但是我很感激你的努力,它对我帮助很大。最后,我明白了不应该像那样直接将JSON对象传递给服务器,因为这容易出现错误。但是,我确实从你和其他人的答案中学到了如何对字符串进行操作。谢谢! - sir-haver
@sir-haver,感谢您的回复!您可以在我的账户网站上找到很多好的答案。而且**这里是我的答案列表**,尤其是关于JavaScript的。 - Bharata
这个在使用Graphql将React表单字段发送到后端时完美运作了 :) - André Lucas

3

JavaScript没有内置函数可以将一个对象转换为以下两种字符串表示形式之一:

  • 使用标识符而不是字符串作为属性名
  • 表示用于创建该对象的原始语法

你可以为前者编写自己的函数(至少在属性名可以表示为字面量时),但是对于后者,由于JavaScript存储有关首次创建对象时使用的源代码的信息,因此不可能实现。


非常感谢,伙计。 - sir-haver

1

Ok just for fun...roll your own?

const stringify = (obj) => {
    // Iterate over keys, reducing to a string
    let str = Object.keys(obj).reduce((acc, cur) => {
        let next = `${cur}: "${obj[cur]}"`;
        return acc
            ? `${acc}, ${next}`
            : `{${next}`;
    }, '');
    
    // Return, appending final '}'
    return `${str}}`;
}

document.write(stringify({
    foo:1,
    bar:'seat'
}));

话虽如此,由于您的确切要求不清楚,因此我不确定这是否符合您的要求。但如果没有适用的本地解决方案,它可能是一个起点。


@jonaswilms 这个可以很容易地修改以支持嵌套对象和数组。由于要求不完整,我提供了一个起点来演示一个概念。 - Madbreaks

0

它确实将其转换为文字语法。您可以使用多种语法创建对象。以下两个对象声明都是有效的:

var a = {a: "a"}
var b = {"b": "b"}

如果您想删除键周围的"",则可以使用以下正则表达式/\"(.*?)\":/g进行匹配,并将其替换为类似于以下内容的内容:
function reformat(str) {
    var myRegexp = /\"(.*?)\":/g;
    match = myRegexp.exec(str);
    while (match != null) {
        str = str.replace(match[0], match[1] + ":");
        match = myRegexp.exec(str);
    }

    return str;
}

希望能有所帮助 :)


1
非常感谢你,伙计。 - sir-haver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接