Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

missing quotation marks on keys in JSON

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.

like image 779
user1074891 Avatar asked Dec 12 '22 05:12

user1074891


2 Answers

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
like image 165
Michael Geary Avatar answered Dec 20 '22 17:12

Michael Geary


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');
like image 34
Dan Cowell Avatar answered Dec 20 '22 19:12

Dan Cowell