如何快速检查 JSON 是不是为空?

Posted

技术标签:

【中文标题】如何快速检查 JSON 是不是为空?【英文标题】:How to check if JSON is null in swift?如何快速检查 JSON 是否为空? 【发布时间】:2015-03-25 19:09:47 【问题描述】:

我目前正在开发一个带回 json 的应用程序,格式如下

"location_subtype" = "somevalue"; "location_type" = 强制; 月=“2015-01”; “结果状态” = 类别=“一些值”; 日期=“某个值”; ;

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

"location_subtype" = "somevalue"; "location_type" = 强制; 月=“2015-01”; “结果状态”=“”; "persistent_id" = "";

问题是如何检查结果状态的值是否不是“空”?

我尝试了以下方法将类别和日期存储到标签中,但它遇到错误,第一个 if 语句应该检查值是否不为空,如果它不是转到下一个 if 语句。但是它继续下一个 if 语句,我收到以下错误

线程 1:EXC_BAD_ACCESS(code=2, address=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,我需要做什么才能在第一个 if 语句处停止?

提前谢谢你。

【问题讨论】:

@MartinR 如果我尝试以下if (dict["outcome_status"] as NSString != "") 它仍然会崩溃。 【参考方案1】:

试试这样的:

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 的一种安全方式。

【讨论】:

谢谢你,这个效果很好,应用现在没有崩溃。 太棒了......我根本没有处理悲伤的路径,我的应用程序在悲伤的路径上崩溃了:/ 此示例适用于字符串...但不适用于其他类型。我认为最好的解决方案是@NunoFerro ***.com/a/37468020/4693765 @JosePoseS 您需要注意代码,有一个类型转换运算符(as?)会尝试将 json 内容更改为字符串(如果不返回nil),表示, 如果你的 json 内容不是字符串,你需要改变类型。 @Vagner 你需要多注意标题问题。 “如何快速检查 Json 是否为空?”不是如果是字符串或其他类型。我也投赞成票,因为完全没有错。【参考方案2】:
if ((nullObject as? NSNull) == nil)  
        ...
       

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

尝试对应的Swift类到后面的Objective C类,

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

else 
    // do something

【讨论】:

以上是关于如何快速检查 JSON 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 NodeJS 中的 JSON 是不是为空?

如何在javascript中执行if语句来检查JSON数组是不是为空?

Laravel/PHP - 如何检查 JSON 是不是为空? [复制]

检查 JSON 响应数据是不是为空 [重复]

检查存储 vuex 的 json 数组是不是为空

jQuery Ajax Json 响应 - 检查是不是为空