2014-06-25 9 views
5

Jestem spróbować ustawić NSDictionary do obiektu JSON pobierane z serwera, robię, że w tym wierszu:NSJSONSerialization zwraca „<null>” string

_peopleArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

Działa prawidłowo i właściwie tworzy słownika . Jednak mam problem, wartości, które są null w obiekcie JSON są przechowywane jako wartości łańcuchowe "<null>" w słowniku. Czy istnieje sposób, aby to naprawić lub obejść? Chcę uniknąć przechodzenia całej rzeczy i ustawienia ich na @"".

Dzięki za wszelką pomoc!

~ Carpetfizz

Odpowiedz

1

Nic Chyba, choć może on być łatwo skorygowane z twórców api, jeśli to niemożliwe, zawsze można umieścić proste makro, używać, aby uniknąć czegoś takiego, wykonaj makro poniżej

#define Is_Empty(value) (value == (id)[NSNull null] || value == nil || ([value isKindOfClass:[NSString class]] && ([value isEqualToString:@""] || [value isEqualToString:@"<null>"]))) ? YES : NO 

#define IfNULL(original, replacement) IsNULL(original) ? replacement : original 

#define IsNULL(original) original == (id)[NSNull null] 

#define SafeString(value) IfNULL(value, @"") 

Wykorzystanie

self.label.text=SafeString([dic objectForKey:@"name"]); 
7

mylisz się. wartości puste w JSON są nie przechowywane jako < wartości null> string. Są przechowywane jako obiekty NSNull, które NSLog loguje jako < null>.

Nigdy nie można ufać danym, które otrzymałeś. Jeśli założysz, że masz NSString i serwer wysyła Ci numer, Twój kod prawdopodobnie się zawiesza.

NSString* myJSONString = ...; 
if ([myJSONString isKindOfClass:[NSString class]]) { 
    it is a string 
} else { 
    it is not a string 
} 
+0

(dodając trochę więcej informacji) Nie tylko NSLog jako ciąg, ale także '[NSString stringWithFormat: @ "% @", nullObj];' wyświetli '' w swojej aplikacji, która dlatego większość ludzi jest wprowadzana w błąd przez debugowanie tego typu danych. –

Powiązane problemy