【问题标题】:SyntaxError: Unexpected token \ in JSON at positionSyntaxError:JSON 中的意外标记 \ 位置
【发布时间】:2017-01-27 08:20:40
【问题描述】:

我正在尝试在 NodeJS/Javascript 中将字符串解析为 JSON,这是我的字符串(我无法更改,来自外部数据库):

'{\\"value1\\":\\"XYZ\\",\\"value2\\":\\"ZYX\\"}'

我在打电话:

JSON.parse(row.raw_data)

但是得到:

SyntaxError: Unexpected token \ in JSON at position

我实际上认为双重转义是在字符串/JSON 中转义的正确方法。

【问题讨论】:

    标签: javascript json node.js


    【解决方案1】:

    您的 JSON 无效。你说过你不能改变它,这是不幸的。

    看起来好像是双字符串化的,但是最外面的引号被去掉了。如果是这样,您可以通过在每一端添加" 然后对其进行双重解析来修复它,如下所示:

    var str = '{\\"value1\\":\\"XYZ\\",\\"value2\\":\\"ZYX\\"}';
    str = '"' + str + '"';
    var obj = JSON.parse(JSON.parse(str));
    console.log(obj);

    不过,理想情况下,您需要检查数据库并更正无效数据。

    我实际上认为双重转义是在字符串/JSON 中转义的正确方式。

    在 JSON 中,字符串用双引号 (") 包裹,而不是双转义。您只能在 字符串中转义双引号(使用单个 \)。

    如果您一直在手动创建 JSON 字符串(在代码中),不要。 :-) 相反,创建要保存的结构,然后对其进行字符串化。手动构建 JSON 字符串容易出错,但正确的 JSON 字符串化器将是可靠的。

    【讨论】:

    • 我最初考虑使用正则表达式来消除反斜杠,但您的解决方案要好得多。所以我取消了写自己的答案,只能说:upvote :-)
    猜你喜欢
    • 2017-08-21
    • 2019-09-21
    • 1970-01-01
    • 2020-06-10
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 2020-01-10
    相关资源
    最近更新 更多