-2

I want to control whether given data is in JSON format. For this control, I use JSON.parse with try catch. As;

var str= {
  "employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
  ]
}
try {
  parsed = JSON.parse(str);
} catch (err) {
    return "It is not valid JSON file";
}

But I want to stretch the rules. I want to accept the following file format where fields does not have to be written inside "" as;

{
 employees:[
  {firstName:"John", lastName:"Doe"},
  {firstName:"Anna", lastName:"Smith"},
  {firstName:"Peter", lastName:"Jones"}
 ]
}

How can I do this? JSON.parse does not accept this format.

Yigit Can
  • 361
  • 1
  • 3
  • 15

2 Answers2

0

You can try cleaning your string and adding " manually.

var str = '{name: "alex" , age: "33"}';
var d= '{employees:[{firstName:"John",lastName:"Doe"},{firstName:"Anna",lastName:"Smith"},{firstName:"Peter",lastName:"Jones"}]}';

function processObject(str){
  var spaceReg = /\s/g;
  var _str = str.replace(spaceReg, "");
  
  var quoteReg = /\"/g;
  _str = _str.replace(quoteReg, "");
  
  var startBrace = /{/g;
  _str = _str.replace(startBrace,"{\"");
  
  var endBrace = /}/g;
  _str = _str.replace(endBrace,"\"}");
  
  var colon = /:/g
  _str = _str.replace(colon,"\":\"");
  
  var comma = /,/g
  _str = _str.replace(comma,"\",\"");
  
  var endBraceStr = /}\"/g
  _str = _str.replace(endBraceStr,"}");
  
  var startBraceStr = /\"{/g
  _str = _str.replace(startBraceStr,"{");
  
  var endBraceArrStr = /\]\"/g
  _str = _str.replace(endBraceArrStr,"]");
  
  var startBraceArrStr = /\"\[/g
  _str = _str.replace(startBraceArrStr,"[");
  
  console.log(_str)
  
  return JSON.parse(_str);
}

console.log(processObject(str))
console.log(processObject(d))
Rajesh
  • 24,354
  • 5
  • 48
  • 79
0

JSON.parse has to be applied to a JSON string, not to a JSON object.

Pavel Gatnar
  • 3,987
  • 2
  • 19
  • 29