为什么JSON.parse失败并带有空字符串?

Ric*_*ard 61 javascript json

为什么:

JSON.parse('');
Run Code Online (Sandbox Code Playgroud)

产生错误?

Uncaught SyntaxError: Unexpected end of input
Run Code Online (Sandbox Code Playgroud)

如果它刚刚归来,那不是更合乎逻辑null吗?

bhs*_*cer 100

由于空字符串无效JSON,因此JSON.parse('')返回是不正确的,null因为它"null"是有效的JSON.例如

JSON.parse("null");
Run Code Online (Sandbox Code Playgroud)

回报null.将无效JSON解析为null也是错误的.

虽然空字符串无效,但JSON两个引号是有效的JSON.这是一个重要的区别.

也就是说包含两个引号的字符串与空字符串不同.

JSON.parse('""');
Run Code Online (Sandbox Code Playgroud)

将正确解析,(返回一个空字符串).但

JSON.parse('');
Run Code Online (Sandbox Code Playgroud)

将不会.

有效的最小JSON字符串是

空对象 '{}'

空数组 '[]'

字符串为空 '""'

一个例如 '123.4'

布尔值为true 'true'

布尔值为false 'false'

空值 'null'

  • @abhillman这是因为所有有效的JSON必须是一个字符串而null不是一个字符串. (4认同)
  • @bhspencer pshaw。你会相信谁,是我还是互联网上某个随机发明了该标准的人?;-) (3认同)
  • JSON.parse('""') 不起作用我收到错误: JSON::ParserError: 757: '""' 处出现意外标记 (2认同)

iam*_*eek 10

使用try-catch来避免它:

var result = null;
try {
  // if jQuery
  result = $.parseJSON(JSONstring);
  // if plain js
  result = JSON.parse(JSONstring);
}
catch(e) {
  // forget about it :)
}
Run Code Online (Sandbox Code Playgroud)