如何在Swift中处理json null值

时间:2016-06-03 05:12:32

标签: json swift core-data null

我正在玩JSON最近两天,面对很多好奇的问题,并且由于堆栈溢出,它对我有所帮助。这是JSON特色键有两种类型的String值。

 "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
    }

但遗憾的是无法找到解决方案,您的回答将不胜感激。

6 个答案:

答案 0 :(得分:37)

试试这个

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

感谢。

答案 1 :(得分:6)

这是一个工作代码,类型转换操作符(作为?)将在这里完成。 Null不会被类型化为字符串,因此执行将转到失败块。

 form method="post" name="" action="http://dev-imaginovation.net/100s-happiness/www-100s-happiness/virtualclasspay">
<input id="pkg_id" type="hidden" value="3" name="pkg_id"/>
<input id="pkg_price" type="hidden" value="0" name="pkg_price"/>
<div class="virtualplan_box">
<div class="virtualplanHeader">Free Package</div>
<div class="virtualplanContent">
<h3>Free Subscription</h3>
<p>Check one of our On-the-Go Virtual Classes free of charge!</p>
<div class="virtualplanprice">
<div id="virtual_description" class="learn-more getstart-btn wow zoomIn clearfix animated" style="visibility: visible; animation-name: zoomIn;">
<a class="fr-btn orange-color-bg white-color purchase-btn" name="submit_plan" style="color: rgb(255, 255, 255); background-color: rgb(247, 144, 73);" href="http://dev-imaginovation.net/100s-happiness/www-100s-happiness/freevirtualclass">Start Trial</a>
</div>
</div>
</div>
</form>
</div>
</div>
<div class="owl-item cloned" style="width: 670px; margin-right: 0px;">
<div class="owl-item active" style="width: 670px; margin-right: 0px;">
<div class="owl-item" style="width: 670px; margin-right: 0px;">
<div class="owl-item cloned" style="width: 670px; margin-right: 0px;">
<div class="owl-item cloned" style="width: 670px; margin-right: 0px;">

答案 2 :(得分:4)

试试这个!

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

答案 3 :(得分:4)

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

如果您想了解有关可选链接的更多信息check out documentation

答案 4 :(得分:2)

您可以使用以下函数将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);

答案 5 :(得分:1)

我做了一个静态函数,将值从json转换为可选的String。

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

我愿意接受您的反馈