2012-10-18 8 views
7

Czy poniższe stwierdzenie jest poprawne, czy też brakuje mi czegoś?obiekt zwrócony z NSJSONSerialization może się różnić

Trzeba sprawdzić obiekt powrotny NSJSONSerialization aby sprawdzić, czy jest to słownik lub tablicę - można mieć

data = {"name":"joe", "age":"young"} 
// NSJSONSerialization returns a dictionary 

i

data = {{"name":"joe", "age":"young"}, 
    {"name":"fred", "age":"not so young"}} 
// returns an array 

Każdy typ ma innej metody dostępu, który łamie się, jeśli zostanie użyte na niewłaściwym. Na przykład:

NSMutableArray *jsonObject = [json objectAtIndex:i]; 
// will break if json is a dictionary 

więc trzeba zrobić coś takiego -

id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData 
     options:NSJSONReadingMutableContainers error:&error]; 

    if ([jsonObjects isKindOfClass:[NSArray class]]) 
     NSLog(@"yes we got an Array"); // cycle thru the array elements 
    else if ([jsonObjects isKindOfClass:[NSDictionary class]]) 
     NSLog(@"yes we got an dictionary"); // cycle thru the dictionary elements 
    else 
      NSLog(@"neither array nor dictionary!"); 

miałem dobre spojrzenie thru przepełnienia stosu i dokumentacji firmy Apple i innych miejscach i nie mógł znaleźć żadnego bezpośredniego potwierdzenia powyższego .

+0

Nie wspomniałeś o problemie z kodem. –

+0

Problem polega na tym, że jeśli odzyskasz słownik i użyjesz metody tablicy, aby uzyskać do niego dostęp, zostanie zgłoszony wyjątek. Myślę, że musisz sprawdzić typ obiektu zwracanego, aby to naprawić, ale chciałbyś potwierdzić, że jest to właściwy sposób. – user1705452

Odpowiedz

5

Jeśli po prostu pytasz, czy to jest poprawne, czy nie, tak, to jest bezpieczny sposób na przetwarzanie jsonObjects. Jest tak, jak zrobiłbyś to z innym API, który zwraca id.

+0

ok - dziękuję za to - jest sporo pytań na temat używania NSJSONSerialization i nie sprawdzanie typu zwrotnego (lub zawsze zakładając, że nie jest zmienna) jest/było (dla mnie w każdym razie) subtelne. Celem tego postu było potwierdzenie i wyjaśnienie. – user1705452

Powiązane problemy