我已经解析了JSON数据,现在在将JSON设置为NSDictionary
时,JSON中可能存在某些可能不存在的键。我想检查解析后的JSON中是否存在密钥,如果没有,请将空字段设置为`NSDictionary'对象中的键的值。
jsonData = ["id": ((json["idnumber"]) as? String!)!,
"Name": ((json["name"]) as? String!)!,
"Roll Number": ((json["rollnumber"]) as? String!)!,
"Class": ((json["class"]) as? String!)!,
"Marks": ((json["marks"]) as? String!)!,
"Gender": ((json["gender"]) as? String!)!]
因此,在上述情况下,标记字段可能存在也可能不存在于JSON中。我想检查一下,并将相应的值分配给jsonData
中的相应密钥。
我尝试使用“??”,但这需要大量的编译时间。
答案 0 :(得分:0)
您可以使用if let
或guard
作为条件可选包装。
var jsonData = [String : String]
if let num = json["idnumber"]) as? String {
jsonData["id"] = num
}
else {
jsonData["id"] = num
}
等等。
修改:您也可以尝试这样做。
var id = name = rollNum = class = ""
if let num = json["idnumber"]) as? String {
id = num
}
if let sname = json["name"]) as? String {
name = sname
}
...
然后最后创建Dictionary
var jsonData = ["id": id, "name": name, ...]
答案 1 :(得分:0)
如果存在,您可以设置值,否则为空字符串(“”)。这样可以防止崩溃。请尝试以下代码: -
let idValue = dictionary["idnumber"] as? String ?? ""
let name = dictionary["name"] as? String ?? ""
let rollNumber = dictionary["rollnumber"] as? String ?? ""
let className = dictionary["class"] as? String ?? ""
let marks = dictionary["marks"] as? String ?? ""
let gender = dictionary["gender"] as? String ?? ""
let jsonDic : NSMutableDictionary = NSMutableDictionary()
jsonDic.setObject(idValue, forKey: "id")
jsonDic.setObject(name, forKey: "name")
jsonDic.setObject(className, forKey: "class")
jsonDic.setObject(rollNumber, forKey: "rollNumber")
jsonDic.setObject(marks, forKey: "marks")
jsonDic.setObject(gender, forKey: "gender")