Почему:
JSON.parse('');
вызывает ошибку?
Uncaught SyntaxError: Unexpected end of input
Не было бы более логичным, если бы он только что вернулся null
?
Почему:
JSON.parse('');
вызывает ошибку?
Uncaught SyntaxError: Unexpected end of input
Не было бы более логичным, если бы он только что вернулся null
?
Поскольку пустая строка недействительна 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'
Используйте 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, double).
Если существует вероятность того, что синтаксический анализ будет пустой строкой, разработчик должен проверить его.
Если он был встроен в функцию, он добавит дополнительные циклы, поскольку ожидается, что встроенные функции будут чрезвычайно эффективными, имеет смысл не программировать их для случая гонки.
Потому что '' не является допустимым объектом Javascript/JSON. Пустым объектом будет "{} '
Для справки: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
Для допустимой строки JSON требуется хотя бы "{}". Подробнее см. http://json.org/