I have a string containing malformed JSON which is being provided to me where the keys are missing the quotation marks. The structure of the JSON is out of my control, so I need to work with what I have. I have found the solution that the OP posts in Parsing malformed JSON in JavaScript works, however one of the values contains a URL that the RegEx matches and transforms it into another key like value, resulting in really broken JSON. Any ideas?
I have also looked at jsonrepair, but not having much success there.
If the only thing wrong with the JSON is property names without quotes, then it is still a valid JavaScript object literal even though it isn't valid JSON.
So, if you trust the source, you can wrap the text in parentheses and eval
it.
This will be simpler and more reliable than any regular expression.
Example:
var badJSON = '{ a: "b" }';
var obj = eval( '(' + badJSON + ')' );
console.log( obj ); // Logs: Object {a: "b"}
console.log( obj.a ); // Logs: b
This should do it. All you needed to do was identify when a colon was followed by a forward-slash (like in http://) instead of in isolation. Note that this will fail in the event that one of your JSON values has a colon in it, so it may need more improvement for your use case.
.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:([^\/])/g, '"$2":$4');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With