首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
宝塔
V2EX  ›  JavaScript

当字符串中有单引号的时候使用 JSON.parse 转化字符串为数组的时候会报错

  •  
  •   Hopetree · 73 天前 · 1182 次点击
    这是一个创建于 73 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有个调用接口的方法,但是我发现,当接口返回的数据类似如下这种:

    window.baidu.sug({q:"slim 版本",p:true,s:["let\'s slim","slim 的中文是什么","super slim"]});
    

    这个里面的"let\'s slim"会导致我将[....]这一段用正则提出出来转化成数组的时候报错,找了好久没有找到原因,感觉是跟单双引号嵌套有关,但是我不知道 js 怎么解决这个问题,这个地方还是转义符号,也不能算嵌套把,为啥还会报错?

    下图是我的代码片段 tendcode_2019-09-04_20-30-40.png

    下面是 console 打印的结果和报错 nZrxX9.png

    9 回复  |  直到 2019-09-05 09:10:59 +08:00
        1
    ysc3839   73 天前
    看一下错误信息那里的 at position
        2
    ReVanTis   73 天前
    我隐约觉得你如果把 \' 改成 \\' 应该能 parse 过。。。
        3
    shintendo   73 天前   ♥ 1
    JSON 规定字符串用双引号,因此里面的单引号不需要转义,也<b>不允许转义</b>
        4
    ericgu1788   73 天前 via Android
    可以试试反引号
        5
    chendy   73 天前
    这里的单引号不需要转义,转义了反而会错
        6
    dallaslu   73 天前
    看 JSON.parse 的结果,应该是当成了 JSON.parse('["let\\\'s slim"]')
        7
    AlphaTr   73 天前 via iPhone
    看结构应该是个 jsonp 的接口,所以通常都是按照 jsonp 的方式来处理;正则匹配字符串反而复杂
        8
    shintendo   73 天前
    啰嗦两句,你这个字符串用字面量写出来的话,其实是"[\"let\\'s slim\"]"。这个字面量经过一次转义后变成你的字符串,里面的反斜杠和单引号是两个实实在在的字符,而不是一个“转义单引号”(否则 console.log 怎么会打出这个反斜杠呢)。

    这两个字符送到 JSON 解析器里,JSON 先读到一个反斜杠,就期待下一个字符与它组成一个转义符(\n,\t 等等),而单引号不符合它的期待
        9
    momocraft   73 天前
    用正则解析上下文无关文法的必然现象
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2198 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 27ms · UTC 10:27 · PVG 18:27 · LAX 02:27 · JFK 05:27
    ♥ Do have faith in what you're doing.