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

Почему:

JSON.parse('');

вызывает ошибку?

Uncaught SyntaxError: Unexpected end of input

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

Ответ 1

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

JSON.parse("null");

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

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

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

JSON.parse('""');

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

JSON.parse('');

не будет.

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

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

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

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

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

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

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

Значение null 'null'

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 5

Для допустимой строки JSON требуется хотя бы "{}". Подробнее см. http://json.org/