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

15,137

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 "\\\\".

Share:
15,137
Saul
Author by

Saul

Ever felt annoyed by GUI clutter or unnecessary widgets on this site? Meet undercurrent. It's a Google Chrome extension that removes some of them.

Updated on June 09, 2022

Comments

  • Saul
    Saul about 2 years

    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?