Мой JavaScript иногда сбой в этой строке:
var json = eval('(' + this.responseText + ')');
Сбои возникают, когда аргумент eval()
не является JSON. Есть ли способ проверить, является ли строка JSON перед выполнением этого вызова?
Я не хочу использовать фреймворк - есть ли способ сделать эту работу, используя только eval()
? (Там хорошая причина, я обещаю.)
Устанавливает альтернативу jQuery...
try
{
var jsonObject = jQuery.parseJSON(yourJsonString);
}
catch(e)
{
// handle error
}
Я настоятельно рекомендую вам использовать javascript JSON library для сериализации в JSON и из него. eval()
- это риск безопасности, который никогда не должен использоваться, если вы абсолютно не уверены в том, что его ввод в санацию и безопасность.
С помощью библиотеки JSON просто оберните вызов его эквивалентом parse()
в try/catch-block для обработки не-JSON-входа:
try
{
var jsonObject = JSON.parse(yourJsonString);
}
catch(e)
{
// handle error
}
Promise
вместо Try-catch
:npm install is-json-promise ; //for NodeJS environment.
ИЛИ
String.IsJSON = (candidate) =>
new Promise(
(resolve, reject) => resolve(JSON.parse(candidate))
)
;
String.IsJSON(`iam here`)
.then((object) => console.info(object))
.catch((error) => alert('Waww, i cannot be JSON')) ; // promise will run catch
или
String.IsJSON(`{"welcome":"Hello"}`)
.then((object) => console.info(object)) // promise will run "then"
.catch((error) => alert('Waww, i cannot be JSON')) ;