如何在Swift中处理json空值
在过去的两天里,我一直在玩JSON,面临着很多奇怪的问题,多亏了堆栈溢出,它才帮助了我。这是一个JSON特征键,它有两种类型的字符串值如何在Swift中处理json空值,json,swift,core-data,null,Json,Swift,Core Data,Null,在过去的两天里,我一直在玩JSON,面临着很多奇怪的问题,多亏了堆栈溢出,它才帮助了我。这是一个JSON特征键,它有两种类型的字符串值 "featured":"1" 或 我尝试了很多来处理这个问题,但是失败了 步骤1: if dict.objectForKey("featured") as? String != nil { featured = dict.objectForKey("featured") as? String } 步骤2: let null = N
"featured":"1"
或
我尝试了很多来处理这个问题,但是失败了
步骤1:
if dict.objectForKey("featured") as? String != nil {
featured = dict.objectForKey("featured") as? String
}
步骤2:
let null = NSNull()
if dict.objectForKey("featured") as? String != null {
featured = dict.objectForKey("featured") as? String
}
步骤3:
if dict.objectForKey("featured") as? String != "" {
featured = dict.objectForKey("featured") as? String
}
但不幸的是找不到解决方案,您的回答将不胜感激 试试这个
func nullToNil(value : AnyObject?) -> AnyObject? {
if value is NSNull {
return nil
} else {
return value
}
}
object.feature = nullToNil(dict["feature"])
在这里,您可以使用此方法,它将null值转换为nil,并且不会导致应用程序崩溃
您也可以将用作?
object.feature = dict["feature"] as? NSNumber
谢谢。试试这个
if let demoQuestion = dict.objectForKey("featured"){
let getValue: String = demoQuestion as! String
}
else {
print("JSON is returning nil")
}
这是一个工作代码,输入cast操作符(as?)将在这里完成此操作。Null不会被类型转换为字符串,因此执行将转到失败块
if let featured = dict["featured"] as? String {
print("Success")
}
else {
print("Failure")
}
可选的链接方式是使用
if let
或其对应的guard let
。所有三个步骤组合在一起(缺少,类型错误-也是NSNull,空字符串):
如果您想了解更多关于可选链接的信息,您可以使用下面的函数删除空字符串并防止崩溃
func removeNullFromDict (dict : NSMutableDictionary) -> NSMutableDictionary
{
let dic = dict;
for (key, value) in dict {
let val : NSObject = value as! NSObject;
if(val.isEqual(NSNull()))
{
dic.setValue("", forKey: (key as? String)!)
}
else
{
dic.setValue(value, forKey: key as! String)
}
}
return dic;
}
在以下面的方式向任何方法调用函数提供dict之前
let newdict = self.removeNullFromDict(dict: dict);
我做了一个静态func来将值从json转换为可选字符串
class Tools{
static func setOptionalStr(value : Any?) -> String?{
guard let string = value as! String?, !string.isEmpty else {
return nil
}
return value as? String
}
}
在我的控制器中
let urlStats: String? = Tools.setOptionalStr(value: json["UrlStats"])
我愿意听取您的反馈这会导致崩溃吗?是的,在存储coredata10000000张投票时,我支持您的回答。这太棒了,谢谢!如果您使用的是Alamofire和SwiftyJSON,则必须强制downcast作为AnyObject才能工作=D我的示例看起来是这样的:object[“feature”]:JSON我的null检查看起来像:if nullToNil(值:object[“feature”]as AnyObject)!=nill{//做点什么}
class Tools{
static func setOptionalStr(value : Any?) -> String?{
guard let string = value as! String?, !string.isEmpty else {
return nil
}
return value as? String
}
}
let urlStats: String? = Tools.setOptionalStr(value: json["UrlStats"])