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

时间:2019-01-29 19:34:08

标签: javascript json javascript-objects

如果我有对象文字:

{a: "hello"}

是否有Javascript函数将该对象转换为文字字符串,以便输出为文字语法:

'{a: "hello"}'

使用JSON.stringify,输出将是

'{"a": "hello"}'

4 个答案:

答案 0 :(得分:3)

JavaScript没有内置函数可以将对象转换为其字符串表示形式,或者:

  • 使用标识符代替字符串作为属性名称
  • 代表用于创建对象的原始语法

您可以为前者编写自己的函数(至少当属性名称​​ 可以表示为文字时),但是后者是不可能的,因为JavaScript不存储有关用于创建的源代码的信息首先是对象。

答案 1 :(得分:1)

您可以先用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));

答案 2 :(得分: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;
}

希望有帮助:)

答案 3 :(得分:0)

好吧,只是为了好玩...自己滚?

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'
}));

也就是说,您的确切要求尚不清楚,因此我不确定这是否可以满足他们。但是,如果没有适用的本机解决方案,这可能是一个起点。