【问题标题】:Javascript JSON.parse with \u0000Javascript JSON.parse 与 \u0000
【发布时间】:2018-02-07 16:08:32
【问题描述】:

使用 JSON.parse:

这行得通:

JSON.parse('{\"V\":\"\u008c\"}') // => { V: '' }

这不是:

JSON.parse('{\"V\":\"\u0000\"}') // >> SyntaxError: Unexpected token   in JSON at position 6

这里的概念是什么?

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    唯一的问题是您将 JSON 表达为 Javascript 字符串文字。这是有效的 JSON:

    {"V":"\u0000"}
    

    然而,这是一个包含值 {"V":"<NUL>"} 的 Javascript 字符串:

    '{\"V\":\"\u0000\"}'
    

    Javascript 已经在解释 \u0000 转义序列,因此 JSON.parse 试图解析其中包含 NUL 字节的 JSON 字符串,这是非法的(NUL 必须被转义)。

    您尝试的 JSON 的实际 Javascript 字符串文字表示是:

    JSON.parse('{"V":"\\u0000"}')
                      ↑
    

    【讨论】:

      【解决方案2】:

      您可以在RFC 4627 中找到一些信息。例如:

      2.5。字符串

      字符串的表示类似于 C 中使用的约定 编程语言家族。一个字符串以 引号。所有 Unicode 字符都可以放在 除必须转义的字符外的引号: 引号、反斜线和控制字符(U+0000 通过 U+001F)。

      现在,与您的问题相关,您只需转义 unicode 字符上的 \ 即可进行解析:

      JSON.parse('{"V":"\\u0000"}')
      

      结果:{V: "�"}

      仅供参考,无需在 javascript 中转义单引号字符串中的 "

      【讨论】:

        猜你喜欢
        • 2012-05-08
        • 2010-12-23
        • 2018-06-25
        • 1970-01-01
        • 2018-05-28
        • 2011-07-22
        • 2014-01-13
        • 2011-07-26
        • 1970-01-01
        相关资源
        最近更新 更多