9

I've met an usual problem when escaping a quote within the JSON parse function. If the escaped quote is present, in this case 'test"', it causes the following error 'SyntaxError: JSON Parse error: Unterminated string'.

var information = JSON.parse('[{"-1":"24","0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[""],"12":"","13":"","14":"test\""}]');

JSON Lint validates the JSON as valid.

OneCricketeer
  • 179,855
  • 19
  • 132
  • 245
jdawg
  • 508
  • 2
  • 5
  • 18

4 Answers4

11

You'll have to double escape it, as in "test\\""

var information = JSON.parse('[{"-1":"24","0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[""],"12":"","13":"","14":"test\\""}]');

document.body.innerHTML = '<pre>' + JSON.stringify(information, null, 4) + '</pre>';

The first backslash escapes the second backslash in the javascript string literal. The second backslash escapes the quote in the JSON string literal.

So it's parsed twice, and needs escaping twice.

So even if it's valid JSON, you'll need one escape for javascript string literals that escapes the escape used in JSON.

axiac
  • 68,258
  • 9
  • 99
  • 134
adeneo
  • 312,895
  • 29
  • 395
  • 388
  • @Naveen - The thing is, the string is first parsed in javascript as a string literal, where one of the escapes is removed, and after that it's valid JSON, with one escape remaining. – adeneo Dec 26 '14 at 11:27
0
    var information = JSON.parse('[{"-1":"24","0":"","1":"","2":"","3":"0.0000","4":"","5":"0.00","6":"0.00","7":"1.00","8":"0","9":"false","10":"false","11":[""],"12":"","13":"","14":"test\\""}]');

Putting doubleslash worked for me...at least in console..give it a try..

Tweety01
  • 176
  • 2
  • 17
0

I fixed this problem in my spring boot app with @RestController by Using @IgnoreJson

--------- class book ---------------
@OneToMany(mappedBy = "book")
private Set<Chapitre> chapitres = new TreeSet<>();
--------- class chapitre -----------
@ManyToOne(cascade = CascadeType.MERGE)
@JsonIgnore
private Book book;
-1

Here is the issue : use \' instead of \" at last array of object

\"
\'
Naveen Setty
  • 615
  • 5
  • 26