如何解析 JSON 字典
Posted
技术标签:
【中文标题】如何解析 JSON 字典【英文标题】:How to parse JSON dictionary 【发布时间】:2016-10-10 16:11:35 【问题描述】:我有以下包含 JSON 字典的 JSON 响应:
我只需要提取 3 个类别名称(我的屏幕截图中仅显示 1 个,即“饮料”,但您可以在最顶部看到 3 个)。
我尝试了以下方法,但总是返回 nil。
func getMenuCategories()
let headers = [
"Api-key": apiKey
]
let url = "https://xxxxxxxx/menu/categories"
Alamofire.request(.GET, url, headers: headers, encoding: .JSON)
.responseJSON response in switch response.result
case .Success(let JSON):
print("Success with JSON: \(JSON)")
let response = JSON as! NSDictionary
let categories1 = response.objectForKey("_embedded")! // always nil
let categories2 = response.objectForKey("categories")! // always nil
case .Failure(let error):
print("Request failed with error: \(error)")
我知道我得到了一个有效的响应,因为变量 JSON
包含整个响应。
如何正确搜索?
【问题讨论】:
【参考方案1】:对于特定的 JSON,您可以执行以下操作
guard let jsonData = JSON as? [String: Any],
let embedded = jsonData["_embedded"] as? [String: Any],
let categories = embedded["categories"] as? [[String: Any]] else
return
现在类别应该有 [String:Any] 的数组,在你的情况下 categories[0] 将保存带有饮料的那个的信息,即
guard let drinksCategory = categories.first,
let name = drinksCategory["name"] as? String else
return
现在,如果 JSON 一切正常,那么 name 变量应该包含您想要的正确信息
【讨论】:
感谢您的建议,但类别仍然返回 nil。【参考方案2】:为了回答我自己的问题以防万一这对任何人都有帮助,我最终使用了valueForKeyPath
,如下所示:
func getMenuCategories()
let headers = [
"Api-key": apiKey
]
let url = "https://xxxxxxxx/menu/categories"
Alamofire.request(.GET, url, headers: headers, encoding: .JSON)
.responseJSON response in switch response.result
case .Success(let JSON):
print("Success with JSON: \(JSON)")
let jsonData = JSON as? NSDictionary
let categories = jsonData?.valueForKeyPath("_embedded.categories._embedded.items._embedded.menu_categories.name")
case .Failure(let error):
print("Request failed with error: \(error)")
【讨论】:
以上是关于如何解析 JSON 字典的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中解析 JSON 并将 2 个字段放入字典中? [复制]