Почему 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/