Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the jQuery JSON parser need double escaping for backslashes?

I have trouble wrapping my head around a peculiar feature of the JSON data format.

The situation is as follows: I have a string containing a Windows (sigh) directory path, backslashes escaped. For some reason, the jQuery JSON parser thinks that a single escape is not enough.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">

var success = jQuery.parseJSON('{"a":"b:\\\\c"}');
var failure = jQuery.parseJSON('{"a":"b:\\c"}');

</script>

Can anyone explain what makes such double escaping necessary?

like image 942
Saul Avatar asked Sep 27 '10 20:09

Saul


1 Answers

The first escape escapes it in the Javascript string literal.
The second escape escapes it in the JSON string literal.

The Javascript expression '{"a":"b:\\c"}' evaluates to the string '{"a":"b:\c"}'.
This string contains a single unescaped \, which must be escaped for JSON. In order to get a string containing \\, each \ must be escaped in the Javascript expression, resulting in "\\\\".

like image 186
SLaks Avatar answered Oct 02 '22 20:10

SLaks