如何解决如何快速使用 NSDictionary 访问 JSON 子字段
我的第一个 JSON 如下:
{
"status": 1
}
我的代码如下:
let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data as Data,options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary
print(dict.value(forKey: "status")!)
使用上述代码使用单个 JSON 字段成功访问它。
我的第二个 JSON 如下:
{
"status": {
"subvalue": "true"
}
}
我尝试使用以下代码。但没有运气。
print(dict?["status "]??["subvalue"])
//or
print(dict.value(forKey: ["status ","subvalue"]))
还有其他方法可以访问这个子 JSON 字段吗?
解决方法
试试这个它可能对你有用。
if let status = dict["status"] as? [String: Any]{
print(status["subvalue"])
}
,
如果您坚持使用 JSONSerialization,这将为您提供 subvalue(如果存在)的值
if let result = try? JSONSerialization.jsonObject(with: data) as? [String: Any],let status = result["status"] as? [String: String],let subvalue = status["subvalue"] {
print(subvalue)
}
但最好还是长期学习 Codable(在这种情况下为可解码),因为您的代码会更清晰,问题更少,尽管开销很小。
struct Root: Decodable {
let status: Status
}
struct Status: Decodable {
let subvalue: String
}
do {
let result = try JSONDecoder().decode(Root.self,from: data)
print(result.status.subvalue)
}
,
我已经更改了我的答案以获得更好的方法,如果您真的不想解码为模型类,那么您仍然可以采用这种方法。
if let status = a["status"] as? NSDictionary {
if let subvalue = status["subvalue"] as? String {
print(subvalue) // your fully wrapped value
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。