sir-haver
sir-haver

Reputation: 3592

How to convert JavaScript object into LITERAL string?

If I have the object literal:

{a: "hello"}

Is there a Javascript function to convert this object into a literal string, so that the output would be the literal syntax:

'{a: "hello"}'

With JSON.stringify the output would be

'{"a": "hello"}'

Upvotes: 10

Views: 3468

Answers (4)

Bharata
Bharata

Reputation: 14175

You can do it with JSON.stringify and then with String.replace like follows:

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

Upvotes: 7

Madbreaks
Madbreaks

Reputation: 19539

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

That said, your exact requirements aren't clear so I'm not sure this will meet them. But it might be a starting point if there's no native solution that works.

Upvotes: 1

Shimmy568
Shimmy568

Reputation: 503

It does convert it to the literal syntax. You are able to create objects with multiple forms of syntax. Both of the following object declarations are valid:

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

If you want to remove the "" around the key you should be able to match them with the following regex /\"(.*?)\":/g and replace them with something like this:

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

Hope that helps :)

Upvotes: 0

Quentin
Quentin

Reputation: 943510

JavaScript has no built-in functions that will convert an object to a string representation of it which either:

  • Uses identifiers instead of strings for property names
  • Represents the original syntax used to create the object

You could write your own function for the former (at least when the property name can be represented as a literal) but the latter is impossible as JavaScript stores no information about the source code used to create the object in the first place.

Upvotes: 3

Related Questions