如何快速检查 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 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中执行if语句来检查JSON数组是不是为空?