Почему JSON.parse терпит неудачу с пустой строкой?

Почему:

JSON.parse('');

выдать ошибку?

Uncaught SyntaxError: Unexpected end of input

Не было бы логичнее, если бы он только вернулся null?

5 ответов

Решение

Так как пустая строка не является допустимой JSON, она будет неверной для JSON.parse('') возвращать null так как "null" действительно JSON. например

JSON.parse("null");

возвращается null, Было бы ошибкой, если недействительный JSON также будет проанализирован как ноль.

В то время как пустая строка не является допустимой JSON, две кавычки являются допустимыми JSON Это важное различие.

То есть строка с двумя кавычками - это не то же самое, что пустая строка.

JSON.parse('""');

будет анализировать правильно, (возвращая пустую строку). Но

JSON.parse('');

не буду.

Допустимые минимальные строки JSON:

Пустой объект '{}'

Пустой массив '[]'

Строка, которая пуста '""'

Число например '123.4'

Логическое значение true 'true'

Логическое значение false 'false'

Нулевое значение 'null'

Используйте try-catch, чтобы избежать этого:

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

JSON.parse ожидает правильное обозначение внутри строки, будь то объект {}, массив []строка "" или числовые типы (int, float, doubles).

Если существует вероятность того, что разбор будет пустой строкой, разработчик должен проверить это.

Если бы он был встроен в функцию, это добавило бы дополнительные циклы, так как ожидается, что встроенные функции будут чрезвычайно производительными, имеет смысл не программировать их для случая гонки.

Потому что '' не является допустимым объектом Javascript/JSON. Пустой объект будет '{}'

Для справки: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

Для правильной строки JSON требуется как минимум "{}". Смотрите больше на http://json.org/

Другие вопросы по тегам