如何在swift中检查JSON是否为null?

时间:2015-03-25 19:09:48

标签: ios json xcode swift

我目前正在开发一个应用程序,该应用程序以下列格式返回json

  

“location_subtype”=“somevalue”;       “location_type”=强制;       month =“2015-01”;       “outcome_status”= {           category =“somevalue”;           date =“somevalue”;       };

如果“outcome_status”具有值,则显示类别和日期,但是如果“outcome_value”没有任何值(在大多数情况下),则显示如下

  

“location_subtype”=“somevalue”;       “location_type”=强制;       month =“2015-01”;       “outcome_status”=“”;       “persistent_id”=“”;

问题是如何检查outcome_status的值是否不是“null”?

我已经尝试过以下方法将类别和日期存储到标签中但是它会遇到错误,第一个if语句应该检查该值是否为null以及它是否不转到next if语句。然而,它继续下一个if语句,我得到以下错误

  

线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x102089600)

if (dict["outcome_status"] != nil)
        {
            if ((dict["outcome_status"]as NSDictionary)["category"] != nil)
            {
                outcomeStatusLabel.text = ((dict["outcome_status"]as NSDictionary)["category"] as NSString)
                outcomeStatusLabel.font = UIFont.systemFontOfSize(14.0);
                outcomeStatusLabel.numberOfLines = 0
            }

            if ((dict["outcome_status"]as NSDictionary)["date"] != nil)
            {
                outcomeDateLabel.text = ((dict["outcome_status"]as NSDictionary)["date"] as NSString)
                outcomeDateLabel.font = UIFont.systemFontOfSize(14.0);
                outcomeDateLabel.numberOfLines = 0
            }
        }

如果我删除了第一个if语句,它只会在“outcome_status”=“null”时崩溃,并且如果“outcome_status”中有一些值,则表现完全正常

我需要做什么,如果值为= null,它会在1st if语句处停止?

提前谢谢。

6 个答案:

答案 0 :(得分:23)

尝试这样的事情:

Swift代码:

if let outcome = dict["outcome_status"] as? NSDictionary {
    //Now you know that you received a dictionary(another json doc) and is not 'nil'
    //'outcome' is only valid inside this if statement

    if let category = outcome["category"] as? String {
        //Here you received string 'category'
        outcomeStatusLabel.text = category
        outcomeStatusLabel.font = UIFont.systemFontOfSize(14.0)
        outcomeStatusLabel.numberOfLines = 0
    }

    if let date = outcome["date"] as? String {
        //Here you received string 'date'
        outcomeDateLabel.text = date
        outcomeDateLabel.font = UIFont.systemFontOfSize(14.0)
        outcomeDateLabel.numberOfLines = 0
    }
}

这是与Json合作的安全方式。

答案 1 :(得分:9)

if ((nullObject as? NSNull) == nil)  {
        ...
       }

答案 2 :(得分:3)

如果您使用的是Alamofire和JSONSubscriptType,请使用:

if !(parsedJSON["someKey"] == JSON.null) {
//do your stuff 
}

答案 3 :(得分:2)

尝试使用相应的Swift类来跟随Objective C类,

dict["outcome_status"] != [NSNull null]

答案 4 :(得分:0)

如果您使用 SwiftyJSON,只需检查对象上的 .isEmpty() 以确认它是否为空。

答案 5 :(得分:0)

你可以像这样检查json是否为空

if let data = response["data"].dictionary {
    // do something
}
else {
    // do something
}