Решение 3 (самый быстрый способ)
/**
* @param Object
* @returns boolean
*/
function isJSON (something) {
if (typeof something != 'string')
something = JSON.stringify(something);
try {
JSON.parse(something);
return true;
} catch (e) {
return false;
}
}
Вы можете использовать его:
var myJson = [{"user":"chofoteddy"}, {"user":"bart"}];
isJSON(myJson); // true
<ч />
Лучший способ проверить, принадлежит ли объект типу JSON или массиву:
var a = [],
o = {};
Раствор 1
toString.call(o) === '[object Object]'; // true
toString.call(a) === '[object Array]'; // true
Решение 2
a.constructor.name === 'Array'; // true
o.constructor.name === 'Object'; // true
Но, строго говоря, массив является частью синтаксиса JSON. Поэтому следующие два примера являются частью ответа JSON:
console.log(response); // {"message": "success"}
console.log(response); // {"user": "bart", "id":3}
И
console.log(response); // [{"user":"chofoteddy"}, {"user":"bart"}]
console.log(response); // ["chofoteddy", "bart"]
<ч />
AJAX / JQuery (рекомендуется)
Если вы используете JQuery для передачи информации через AJAX. Я рекомендую вам вставить в атрибут «dataType» значение «json», поэтому, если вы получаете JSON или нет, JQuery проверит его для вас и сообщит об этом через их функции «success» и «error». Пример:
$.ajax({
url: 'http://www.something.com',
data: $('#formId').serialize(),
method: 'POST',
dataType: 'json',
// "sucess" will be executed only if the response status is 200 and get a JSON
success: function (json) {},
// "error" will run but receive state 200, but if you miss the JSON syntax
error: function (xhr) {}
});