![]() |
坚韧的丝瓜 · Index of ...· 1 年前 · |
![]() |
单身的拐杖 · 我连呼吸都变强漫画2季大结局 - 抖音· 1 年前 · |
![]() |
深沉的伤疤 · 刑侦夜话漫画|官方在线漫画全集-快看漫画· 1 年前 · |
![]() |
直爽的长颈鹿 · 玩转golang——JSON高性能自动字段名 ...· 1 年前 · |
按照ECMA262第五版中的解释,JSON是一个提供了stringify和parse方法的内置对象,前者用于将js对象转化为符合json标准的字符串,后者将符合json标准的字符串转化为js对象。json标准参考<a href="http://json.org/" target="\_blank">json.org</a>。(其实将符合json标准的字符串转化为js对象可以用eval,但是eval性能相对差且存在安全隐患(会执行json字符串中的代码),本文仅写JSON)
转义字符(\)对JSON.parse方法有什么影响呢?
一般来说在JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。
例子一:
将字符串'{"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: "\"},也就是说实际显示的数据为一个\(实际可输出一个\说明在此之前还有一个\)。
例子二: