[jquery] 값이 json 객체인지 어떻게 확인할 수 있습니까?

내 서버 측 코드는 성공하면 json 객체이고 실패하면 문자열 ‘false’인 값을 반환합니다. 이제 반환 된 값이 json 객체인지 어떻게 확인할 수 있습니까?



답변

jQuery.parseJSON ()은 문자열이 JSON 인 경우 “object”유형의 객체를 반환해야하므로 유형을 확인하기 만하면됩니다. typeof

var response=jQuery.parseJSON('response from server');
if(typeof response =='object')
{
  // It is JSON
}
else
{
  if(response ===false)
  {
     // the response was a string "false", parseJSON will convert it to boolean false
  }
  else
  {
    // the response was something else
  }
}


답변

선택한 솔루션 이 실제로 작동하지 않습니다.

     "Unexpected Token <" 

Chrome에 오류가 있습니다. 이는 구문 분석이 발생하고 알 수없는 문자가 발생하자마자 오류가 발생하기 때문입니다. 그러나 ajax를 통해 문자열 값만 반환하는 경우이 문제를 해결할 수있는 방법이 있습니다 (PHP 또는 ASPX를 사용하여 ajax 요청을 처리하고 조건에 따라 JSON을 반환하거나 반환하지 않을 경우 매우 유용 할 수 있음).

솔루션은 매우 간단합니다. 유효한 JSON 반환인지 확인하려면 다음을 수행 할 수 있습니다.

       var IS_JSON = true;
       try
       {
               var json = $.parseJSON(msg);
       }
       catch(err)
       {
               IS_JSON = false;
       }                

앞서 말했듯이 AJAX 요청에서 문자열 유형 항목을 반환하거나 혼합 유형을 반환하는 경우에 대한 해결책입니다.


답변

솔루션 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가이를 확인하고 “성공”및 “오류”기능을 통해 알려줍니다. 예:

$.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) {}
});


답변

jQuery가있는 경우 isPlainObject를 사용 하십시오 .

if ($.isPlainObject(my_var)) {}


답변

var checkJSON = function(m) {

   if (typeof m == 'object') {
      try{ m = JSON.stringify(m); }
      catch(err) { return false; } }

   if (typeof m == 'string') {
      try{ m = JSON.parse(m); }
      catch (err) { return false; } }

   if (typeof m != 'object') { return false; }
   return true;

};


checkJSON(JSON.parse('{}'));      //true
checkJSON(JSON.parse('{"a":0}')); //true
checkJSON('{}');                  //true
checkJSON('{"a":0}');             //true
checkJSON('x');                   //false
checkJSON('');                    //false
checkJSON();                      //false


답변

그것은 단지 거짓이고 json 객체이기 때문에 그것이 거짓인지 확인하지 않는 이유는 무엇입니까, 그렇지 않으면 json이어야합니다.

if(ret == false || ret == "false") {
    // json
}


답변

이 스레드가 이미 답변 된 것을 알고 있지만 여기에 오는 것이 내 문제를 실제로 해결하지 못했기 때문에 다른 곳에서이 기능을 발견했습니다. 여기에 오는 누군가는 그것이 그들에게 유용하다는 것을 알게 될 것입니다.

function getClass(obj) {
  if (typeof obj === "undefined")
    return "undefined";
  if (obj === null)
    return "null";
  return Object.prototype.toString.call(obj)
    .match(/^\[object\s(.*)\]$/)[1];
}