2016-10-10 124 views
0

我有一個包含一個JSON字典以下JSON響應:如何解析JSON字典

enter image description here

我需要的是隻提取了3類名(僅1在我的截圖所示,即「飲料「,但你可以在最高處看到3)。

我試過以下,但總是得到零返回。

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包含整個回覆。

如何正確搜索?

回答

0

回答的情況下,該HEL自己的問題任何人,我結束了使用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)") 
      } 
    } 
} 
0

對於特定的JSON,你可以做以下

guard let jsonData = JSON as? [String: Any], 
    let embedded = jsonData["_embedded"] as? [String: Any], 
    let categories = embedded["categories"] as? [[String: Any]] else { 
     return 
} 

現在的類別應該有[字符串:任何]數組在您的情況的類別和[0]將要舉辦的一個與信息飲料,即

guard let drinksCategory = categories.first, 
    let name = drinksCategory["name"] as? String else { 
     return 
} 

現在,如果一切都很好用JSON名稱變量應該有正確的信息,你想

+0

謝謝你的建議,但類別仍然是返回零。 – Polis