如何在 Swift 中处理 json null 值



我最近两天一直在玩 JSON,遇到了很多奇怪的问题,多亏了堆栈溢出,它对我有帮助。这是 JSON 特色键具有两种类型的字符串值。

 "featured":"1"

"featured": null,

我尝试了很多来处理这个问题,但失败了

第 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

谢谢。

这是一个工作代码,类型转换运算符(如?)将在这里解决问题。Null 不会被类型转换为字符串,因此执行将转到失败块。

if let featured = dict["featured"] as? String {
    print("Success")
}
else {
    print("Failure")
}

试试这个!

if let demoQuestion = dict.objectForKey("featured"){
     let getValue: String = demoQuestion as! String
}
else {
print("JSON is returning nil")
}

可选链接与if let或其对应guard let是要走的路。所有三个步骤组合在一起(缺少,错误类型 - NSNull 也是,空字符串):

guard let featured = dict.objectForKey("featured") as? String where !value.isEmpty else {
    print("featured has wrong value")
}
// do what you need to do with featured
如果您想

了解有关可选链接的更多信息,请查看文档

嗨,

您可以使用以下函数将 null 删除为空字符串并防止崩溃

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);

我做了一个静态函数来将值从 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"])

我愿意接受您的反馈

相关内容

  • 没有找到相关文章

最新更新