从JSON响应中设置NSDictionary中的值

时间:2016-08-26 06:26:38

标签: ios json swift xcode nsdictionary

我已经解析了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中的相应密钥。

我尝试使用“??”,但这需要大量的编译时间。

2 个答案:

答案 0 :(得分:0)

您可以使用if letguard作为条件可选包装。

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