JSON.parse解析json字符串遇换行符报错 原因以及如何解决
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
因为正确的答案是 '"\\n"'
parse 解析的是 stringify 后的结果, 对于字符串 "\n" 的 stringify 结果是 '"\\n"'
一般来说, 你可以直接在编辑器敲回车来换行. 但是在代码中, 你要在字符串中存储一个换行符, 在 `` 多行字符串没有出来之前, 你是无法在 "" 里面敲回车的, 只能用转义字符 \n 代替, 虽然你写下的是两个, 但是这个字符串的长度为1, 在使用这个字符串时 \n 就被解释为码点为 0x0a 的字符
所以如果要记录字面的 \n, 那么 stringify 结果要对 \ 进行转义, 结果为 \\n , 这样就记录下了你输入的两个字符
产生这个疑问的原因主要是: 对于转义字符, 你写下的和看到的不是等同的, 转义字符是用一个以上的字符表示单个无法直接输出字符, 是一种编码形式
你写下 \n 以为用两个字符, 实际上是代表一个换行符, 码点为 0x0a
而 JSON 标准中对字符的要求是 '0020'.'10FFFF'-'"'-'\''\'
escape
0x0a 不属于这个范围, 自然报错了.
另外补充 eval('"\n"') 报错的原因, eval 是将字符串的内容当作 js 代码. 而上面说了, 你是无法在 "" 里面敲回车的, 所以自然是不合法的 js 代码, 就报错了
如果换成 eval('`\n`') 就不会报错了
解决:字符串需要进行转义。
示例:
var jsonObj=JSON.parse(json.replace(/\n/g,"\\n").replace(/\r/g,"\\r"));
在开发中,有很多转义符,都是需要处理的,如若频繁使用,建议封装一下
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献4条内容
所有评论(0)