2012-05-02 3 views

Répondre

3

Vous pouvez vérifier si l'objet renvoyé est une certaine classe avec la méthode -isKindOfClass:. Par exemple, pour vérifier s'il s'agit d'un tableau:

id jsonObj = [NSJSONSerialization JSONObjectWithData:...] 
if ([jsonObj isKindOfClass:[NSArray class]] { 
    // Do array stuff... 
} 

De même pour les autres types de fondations.

1

Veuillez faire attention à l'utilisation de NSJSONSerialization car il est uniquement pris en charge sur iOS 5.0+ et Mac OS X 10.7+.

Je pense que vous pouvez aussi avoir un essai avec des bibliothèques tierces, telles que:

  • JSONKit (plus rapide que NSJSONSerialization par son introduction)
  • SBJson

deux sont faciles à utiliser et flexible.

+1

J'utilise le ** cadre SBJson ** pour un certain temps, et il a travaillé pour une grande moi ... ;-) –

+3

C'est sympa, mais ça ne répond pas vraiment à la question ... Cela pourrait mieux convenir comme commentaire. – rid

1

Tous les objets peuvent répondre à leur classe. Encore plus utile, vous pouvez demander si quelque chose est membre d'une classe ou tout c'est sous-classes:

id jsonParse; 

if ([jsonParse isKindOfClass:[NSArray self]]) { 
    for (id element in (NSArray *)jsonParse) { 

     // and so on 
    } 
} 
+0

'[NSArray self]' semble bizarre (bien que cela fonctionne); '[NSArray class]' est beaucoup plus typique idiomatique Objective-C. –

+1

C'est plus typique, mais juste un peu plus faux. Demander à une classe pour sa classe, c'est demander sa méta-classe (un concept miséricordieusement absent de l'objectif C). Demander une classe pour elle-même, cependant, est clair, correct, et j'ose dire ... chic. – danh