108 votes

Comment puis-je vérifier si une valeur est un objet JSON?

Mon code côté serveur renvoie une valeur qui est un objet json en cas de succès et une chaîne 'false' en cas d'échec. Maintenant, comment puis-je vérifier si la valeur renvoyée est un objet JSON?

152voto

Serguei Fedorov Points 2001

La solution choisie ne fonctionne pas pour moi parce que je suis un

     "Unexpected Token <" 

erreur dans le navigateur Chrome. C'est parce que l'erreur est levée dès que l'analyse vient de partout et de caractère inconnu. Cependant, il existe un moyen de contourner ce problème si vous êtes de retour seulement de la chaîne de valeurs dans le cadre de l'ajax (qui peut être assez utile si vous utilisez PHP ou ASPX pour traiter les requêtes ajax et pourrait, ou non, de retour JSON selon les conditions)

La solution est assez simple, vous pouvez effectuer les opérations suivantes pour vérifier si c'était un retour JSON valide

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

Comme je l'ai dit avant, c'est la solution si vous êtes de retour de type chaîne de choses à partir de votre requête AJAX ou si vous êtes de retour type mixte.

113voto

Dr.Molle Points 61743

jQuery.parseJSON () doit renvoyer un objet de type "objet", si la chaîne est JSON. Il vous suffit donc de vérifier le type avec 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
  }
}
 

13voto

thnee Points 1356

Si vous avez jQuery, utilisez isPlainObject .

if ($.isPlainObject(my_var)) {}

4voto

SiGanteng Points 23915

Puisqu'il ne s'agit que de false et d'un objet json, pourquoi ne pas vérifier si c'est faux, sinon ce doit être json.

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

2voto

pythonian29033 Points 1595

Je sais que ce fil a déjà été répondu, mais venir ici n'a pas vraiment résolu mes problèmes, j'ai trouvé cette fonction ailleurs. peut-être que quelqu'un qui vient ici trouvera cela utile pour eux;

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X