JSON

javascript转义字符(\)对JSON.parse和eval的影响

字号+ 作者:H5之家 来源:H5之家 2017-08-18 18:00 我要评论( )

一般来说在JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。 对于要转为JSON对象的字符串,如果包含\n,\t,\此类转义字符,执行JSON.parse或者eval后,会报错或者丢失掉部分信息

  一般来说在JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。

  对于要转为JSON对象的字符串,如果包含\n,\t,\此类转义字符,执行JSON.parse或者eval后,会报错或者丢失掉部分信息(eval)。

eval('{a:"\n"}')//SyntaxError: unterminated string literal eval('{a:"c:\\n"}')//正确 eval('{a:"c:\\d"}')//\字符丢失 JSON.parse('{a:"c:\\d"}')//SyntaxError: JSON.parse: expected property name or '}'

javascript转义字符(\)对JSON.parse和eval的影响

  例一,将字符串'{"a":"b","b":"\\\\"}'传递给JSON.parse,首先解析器提取单引号括起来的字符串时认为第一个\转义第二 个\ 第三个\转义第四个\,也就是说实际可输出字符串是{"a":"b","b":"\\"}(可通过 console.log('{"a":"b","b":"\\\\"}')验证),之后正式转为js对象的时候还有一次转义,也就是实际输出字符转中的第 一个\转义第二个\(此时只有两个\)。所以console.log(JSON.parse('{"a":"b","b":"\\\\"}') );输出结果为Object {a: "b", b: "\"},也就是说实际显示的数据为一个\(实际可输出一个\说明在此之前还有一个\)。


  例二:

var obj = { a : "b", b : "\\", c : { b : "\\", a : { b : "\\" } } }; var json_str = JSON.stringify(obj); console.log( JSON.stringify(obj) ); console.dir(JSON.parse(json_str)); console.dir(JSON.parse('{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}'));

输出结果如下图

javascript转义字符(\)对JSON.parse和eval的影响

  根据转义规则,实际输出一个\在这个\之前必定有一个\。所以如上第一行输出按照书写来说为'{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}',可通过第三条输出来验证。

  总结,如果想在js对象中出现一个\,需要在json字符串中出现四个\ 。
  对于其他的其他的特殊字符

  • 1.双引号("),如果正确出现双引号应为\\\"
  • 2.\n,如想想出现正确的换行需要json字符串中是\\n,其实是先对\n中的\转义,n变成了普通字符,在解析为js对象的时候n与之前的\(只有一个\了)被解释为换行。如下的两个与此类似。
  • 3.\r,\\r
  • 4.\t,\\t
  • 来源:

    2013-8-8网络

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • jQuery调用WebService返回JSON数据

      jQuery调用WebService返回JSON数据

      2017-08-18 11:01

    网友点评
    4