Checking a null value in Objective-C that has been returned from a JSON string
I have a JSON object that is coming from a webserver.
The log is something like this:
{
"status":"success",
"UserID":15,
"Name":"John",
"DisplayName":"John",
"Surname":"Smith",
"Email":"email",
"Telephone":null,
"FullAccount":"true"
}
Note the Telephone is coming in as null if the user doesn't enter one.
When assigning this value to a NSString
, in the NSLog
it's coming out as <null>
I am assigning the string like this:
NSString *tel = [jsonDictionary valueForKey:@"Telephone"];
What is the correct way to check this <null>
value? It's preventing me from saving a NSDictionary
.
I have tried using the conditions [myString length]
and myString == nil
and myString == NULL
Additionally where is the best place in the iOS documentation to read up on this?
Solution 1:
<null>
is how the NSNull singleton logs. So:
if (tel == (id)[NSNull null]) {
// tel is null
}
(The singleton exists because you can't add nil
to collection classes.)
Solution 2:
Here is the example with the cast:
if (tel == (NSString *)[NSNull null])
{
// do logic here
}
Solution 3:
you can also check this Incoming String like this way also:-
if(tel==(id) [NSNull null] || [tel length]==0 || [tel isEqualToString:@""])
{
NSlog(@"Print check log");
}
else
{
NSlog(@Printcheck log %@",tel);
}
Solution 4:
If you are dealing with an "unstable" API, you may want to iterate through all the keys to check for null. I created a category to deal with this:
@interface NSDictionary (Safe)
-(NSDictionary *)removeNullValues;
@end
@implementation NSDictionary (Safe)
-(NSDictionary *)removeNullValues
{
NSMutableDictionary *mutDictionary = [self mutableCopy];
NSMutableArray *keysToDelete = [NSMutableArray array];
[mutDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if (obj == [NSNull null])
{
[keysToDelete addObject:key];
}
}];
[mutDictinary removeObjectsForKeys:keysToDelete];
return [mutDictinary copy];
}
@end
Solution 5:
The best answer is what Aaron Hayman has commented below the accepted answer:
if ([tel isKindOfClass:[NSNull class]])
It doesn't produce a warning :)