如何在Swift中处理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

在过去的两天里,我一直在玩JSON,面临着很多奇怪的问题,多亏了堆栈溢出,它才帮助了我。这是一个JSON特征键,它有两种类型的字符串值

 "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"])