We all know we can use JSON.parse()
to convert the string \'{\"a\":0,\"b\":\"haha\"}\'
to the object {a: 0, b: \'haha\'}
.
But can
A string like {a: 0, b: "haha"}
is not JSON, but just a bunch of JavaScript code.
Best way to get a JSON representation of data inside is to run it through a JS parser (such as Esprima), traverse the syntax tree and build a json object out of it. This needs some work, but at least you'll have the parsing done correctly, with proper handling of escape sequences.
Here's a starting point:
const esprima = require("esprima");
const code = '({a: 0, b: "haha"})';
const ast = esprima.parse(code);
const properties = ast.body[0].expression.properties;
const output = properties.reduce((result, property) => {
result[property.key.name] = property.value.value;
return result;
}, {});
console.log(output);
This code assumes a lot about what the input code looks like - might be OK for a prototype, but still needs error checking and handling nested objects.
(A more generic approach could involve a recursive function that takes an ObjectExpression
and returns an equivalent JSON.)
I also had to wrap your input in parentheses so that it's an expression (not a block statement) according to JS grammar.