我正在玩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
}
但遗憾的是无法找到解决方案,您的回答将不胜感激。
答案 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"])
我愿意接受您的反馈