【发布时间】: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
使用 JSON.parse:
这行得通:
JSON.parse('{\"V\":\"\u008c\"}') // => { V: '' }
这不是:
JSON.parse('{\"V\":\"\u0000\"}') // >> SyntaxError: Unexpected token in JSON at position 6
这里的概念是什么?
【问题讨论】:
标签: javascript json
唯一的问题是您将 JSON 表达为 Javascript 字符串文字。这是有效的 JSON:
{"V":"\u0000"}
然而,这是一个包含值 {"V":"<NUL>"} 的 Javascript 字符串:
'{\"V\":\"\u0000\"}'
Javascript 已经在解释 \u0000 转义序列,因此 JSON.parse 试图解析其中包含 NUL 字节的 JSON 字符串,这是非法的(NUL 必须被转义)。
您尝试的 JSON 的实际 Javascript 字符串文字表示是:
JSON.parse('{"V":"\\u0000"}')
↑
【讨论】:
您可以在RFC 4627 中找到一些信息。例如:
2.5。字符串
字符串的表示类似于 C 中使用的约定 编程语言家族。一个字符串以 引号。所有 Unicode 字符都可以放在 除必须转义的字符外的引号: 引号、反斜线和控制字符(U+0000 通过 U+001F)。
现在,与您的问题相关,您只需转义 unicode 字符上的 \ 即可进行解析:
JSON.parse('{"V":"\\u0000"}')
结果:{V: "�"}
仅供参考,无需在 javascript 中转义单引号字符串中的 "。
【讨论】: