带有nul'的Javascript JSON字符串\0';

带有nul'的Javascript JSON字符串\0';,javascript,json,null,Javascript,Json,Null,基于属性的测试发现了很多bug。在用PostgreSQL修复了一个bug之后,它最终表现为一个JavaScript bug。这是在铬中测试的: JSON.stringify("wee"); // "'wee'" JSON.stringify("we\0e"); // ""we\u0000e"" JSON.parse("'we\u0000e'"); // Uncaught SyntaxError: Unexpected token in JSON at position 0 JS

基于属性的测试发现了很多bug。在用PostgreSQL修复了一个bug之后,它最终表现为一个JavaScript bug。这是在铬中测试的:

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" !!
问题是JSON是否应该支持字符串中的“\0”。PostgreSQL&C/C++说不,其他人说肯定。还有人说也许

无论如何,ChromeJS中的JSON.parse/stringify之间肯定存在一些不一致。其他json解析器对“\u0000”没有问题


我完全被最后一句话搞糊涂了

JSON不能包含NUL字符,但它可以包含转义序列
\u0000
,以表示NUL字符。在JavaScript中,表示为
'\\u0000'
'\u0000'
只是一个长度为1的字符串;一个NUL字符)


console.log(JSON.parse('we\\u0000e')=“we\0e”)
JSON。使用此类字符串进行stringify
将生成一个带有反斜杠字符的字符串:

JSON.stringify("we\0e");
结果生成一个包含

"we\u0000e"
(包括
s)。此字符串不包含实际的nul字符-而是包含
\
字符,后跟
u
,后跟4个零

你的第一个问题是什么

JSON.parse("'we\u0000e'");
是不是
JSON.parse
只接受双引号字符串,而不接受单引号字符串。(
JSON.parse(`foo'`)
也会抛出一个错误)

第二个问题

JSON.parse('"we\u0000e"');
解释器首先将传递给
JSON.parse
的字符串转义为包含实际nul字符的字符串,而
JSON.parse
不理解这些字符。解析的字符串不包含11个字符,它只包含6个字符

console.log('we\u0000e');

console.log(“'we\u0000e”'.length);
“'we\u0000e'”
是一个Javascript字符串文字,带有一个NUL字符,编码为反斜杠转义…那么
“'we\\u0000e'”
呢?这会解析吗?第三个示例很混乱,它永远不会是有效的JSON(
'foo'
)不管是否支持空字符。此外,字符的呈现方式和它们在内存中的表示方式是两件不同的事情。您确定在上一个示例中呈现代码点的代码没有决定将空字符呈现为空格吗?啊,需要转义“\”。谢谢。