我最近两天一直在玩 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"])
我愿意接受您的反馈