Ray*_*Ray 2 javascript null json
基于属性的测试发现了很多错误。使用 PostgreSQL 修复 bug 后,它最终表现为 JavaScript bug。这是在 Chrome 中测试的:
JSON.stringify("wee"); // "'wee'"
JSON.stringify("we\0e"); // ""we\u0000e""
JSON.parse("'we\u0000e'"); // Uncaught SyntaxError: Unexpected token in JSON at position 0
JSON.parse('"we\u0000e"'); // Uncaught SyntaxError: Unexpected token in JSON at position 3
JSON.parse("\"we\u0000e\""); // Uncaught SyntaxError: Unexpected token in JSON at position 3
JSON.parse(JSON.stringify("we\u0000e")); // "we e" !!
Run Code Online (Sandbox Code Playgroud)
问题是 JSON 是否应该支持字符串中的 '\0'。PostgreSQL 和 C/C++ 说不。其他人说肯定。还有人说也许...
不管怎样,Chrome JS 中的 JSON.parse/stringify 之间肯定存在一些不一致。其他json解析器对'\u0000'没有问题。
我对最后一行完全感到困惑!
JSON.stringify使用这样的字符串会产生带有文字反斜杠字符的字符串:
JSON.stringify("we\0e");
Run Code Online (Sandbox Code Playgroud)
结果包含一个字符串
"we\u0000e"
Run Code Online (Sandbox Code Playgroud)
(包括"s)。该字符串不包含实际的 nul 字符 - 相反,它包含一个\字符,后跟u,然后是 4 个零。
你的第一个的问题
JSON.parse("'we\u0000e'");
Run Code Online (Sandbox Code Playgroud)
是JSON.parse只接受双引号字符串,而不接受单引号字符串。(JSON.parse(`'foo'`)也会抛出错误)
第二个的问题
JSON.parse('"we\u0000e"');
Run Code Online (Sandbox Code Playgroud)
是解释器首先对传递给包含实际 nul 字符的字符串进行转义JSON.parse,并且JSON.parse不理解此类字符。解析后的字符串不包含 11 个字符,只包含 6 个字符。
JSON.stringify("we\0e");
Run Code Online (Sandbox Code Playgroud)
您需要指示一个文字反斜杠,后跟u0000,才能JSON.parse正常工作:
"we\u0000e"
Run Code Online (Sandbox Code Playgroud)
如果您与 链接在一起JSON.parse,JSON.stringify它就可以正常工作(当您不必手动转义所有内容时,事情就不那么混乱了):
JSON.parse("'we\u0000e'");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |