从 JSON 响应设置 NSDictionary 中的值
Posted
技术标签:
【中文标题】从 JSON 响应设置 NSDictionary 中的值【英文标题】:Setting the value in NSDictionary from JSON response 【发布时间】:2016-08-26 06:26:37 【问题描述】:我已经解析了 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
中的相应键。
我尝试使用“??”,但是编译时间很长。
【问题讨论】:
【参考方案1】:您可以使用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, ...]
【讨论】:
效果很好。但是有没有替代方法来优化代码。考虑到我有 35 到 40 个这样的字段,那么对于每个字段我需要编写这 4 行代码。【参考方案2】:如果存在则可以设置值,否则为空白字符串 ("")。这将防止崩溃。试试下面的代码:-
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")
【讨论】:
我尝试了你给出的解决方案。 “??”的问题是它需要大量的编译时间。我有30多个领域。即使您使用 10 个“??”该项目无法编译。 “??”的存在和数量代码中的运算符不应显着影响编译时间,并且其中许多运算符不会阻止您的代码编译。听起来您的 Xcode 设置可能有问题。你用的是什么版本? 我试过 jsonData = ["id": ((json["idnumber"]) as?String!)! ?? " ", "Name": ((json["name"]) as?String!)! ?? " "] Xcode7.3 抛出此错误:表达式太复杂,无法在合理时间内解决;考虑将表达式分解为不同的子表达式以上是关于从 JSON 响应设置 NSDictionary 中的值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NSDictionary 中访问本地 JSON 文件响应以在 UITableView 中显示?