Check if parsed json is NSNULL
Asked Answered
T

4

7

I am parsing a JSON response and trying to check if one of my keys is null. How would I go about this? I have the following:

var routingNumber = (dic.value(forKey: "result") as! NSDictionary).value(forKey: "routingNumber") as! String

and this returns:

Could not cast value of type 'NSNull' (0x107d238c8) to 'NSString' (0x107329c40).

How would I check if the value is NSNULL?

if( something != NSNULL){
    do something
}else{
    do something else
}
Tram answered 23/2, 2017 at 5:19 Comment(3)
if let routingNumber = (dic["result"] as? [String: Any])?["routingNumber"] as? String { }Ageratum
Do not use NSDictionary in Swift. Use a Swift dictionary. Do not use value(forKey:) to get a value unless you have a specific reason to be using KVC (which you don't have in this case).Ribal
Wy not use the Swift dictionary?Herder
C
11

You can extract value from dic like this.

if let value = (dict["key"] as? String) 
{ 
  //NOT NULL
} 
else 
{
   //NULL
}
Caseose answered 23/2, 2017 at 5:24 Comment(2)
The parentheses are not needed.Ribal
Does this make sure that the value for dict["key"] isn't nil AND also a String (not other types)?Overbold
I
6

create below function

func isNsnullOrNil(object : AnyObject?) -> Bool
{
    if (object is NSNull) || (object == nil)
    {
        return true
    }
    else
    {
        return false
    }
}

call function where you want to check for null or nil value

if isNsnullOrNil((dic.value(forKey: "result") as! NSDictionary).value(forKey: "routingNumber"))
{
    print("object is null or nil")
}
else
{
    print("object is not  null or nil")
}
Iasis answered 23/2, 2017 at 5:40 Comment(0)
H
0

I had this same problem once.

CHECK FOR IF NSNULL

if let result = dic["result"] as? NSDictionary {
    // There is a dictionary

    if let routingNumber = result["routingNumber"] as? String {
         // There is a routingNumber
    }
    else if let routingNumber = result["routingNumber"] as? NSNull {
         // There is routingNumber but Null
    }
    else {
        // No routingNumber
    }
} 

That should do the trick.

Herder answered 23/2, 2017 at 5:27 Comment(2)
Why use NSDictionary? Use a Swift dictionary.Ribal
user2423476's question used NSDictionary.Herder
M
0
if let result = dict["result"] as? [String:Any], let routingNumber = result["routingNumber"] as? String { 
    print("the routingNumber is \(routingNumber)")
} else { 
    print("nil") 
}
Mikemikel answered 23/2, 2017 at 5:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.