2017-04-16 51 views
1

在我的swift應用程序中,我使用SwiftyJSONAlamofire如何解析alamofire返回json到Swift中的字符串數組?

我有回來從我的後端應用一個JSON:

{ 
    "responses" : [ 
    { 
     "labelAnnotations" : [ 
     { 
      "mid" : "\/m\/01yrx", 
      "score" : 0.8735667499999999, 
      "description" : "cat" 
     }, 
     { 
      "mid" : "\/m\/0l7_8", 
      "score" : 0.7697883, 
      "description" : "floor" 
     }, 
     { 
      "mid" : "\/m\/01c34b", 
      "score" : 0.7577944, 
      "description" : "flooring" 
     }, 
     { 
      "mid" : "\/m\/03f6tq", 
      "score" : 0.52875614, 
      "description" : "living room" 
     }, 
     { 
      "mid" : "\/m\/01vq3", 
      "score" : 0.52516687, 
      "description" : "christmas" 
     } 
     ] 
    } 
    ] 
} 

我要構建的Strings數組,其中包含上述各描述。 我試着用代碼來解析它:

{ 
    case .success: 
     print("sukces") 


     if let jsonData = response.result.value { 

     let data = JSON(jsonData) 
      print(data) 

     if let responseData = data["responses"] as? JSON{ 

      if let responseData2 = responseData["labelAnnotations"] as? JSON{ 
       for userObject in responseData2 { 
        print(userObject["description"]) 
       } 
      } 

     } 

    } 

    case .failure(let error): 
     print("fail") 
     print(error) 
    } 
} 

但線print(userObject)返回空字符串。我如何顯示每個描述?只要我可以在控制檯中打印它,我會將它添加到我的數組中。

回答

3

檢查字典值是否爲JSON類型似乎是這裏的問題,因爲所有SwiftyJSON確實會幫助您省去使用as? ...進行類型檢查的麻煩。

我不熟悉的圖書館,但我認爲你需要做的是:

(假設response.result.value回報的字典,因爲你已經使用.responseJSON方法一樣Alamofire.request(...).responseJSON(...)否則,您得做JSON(data: $0.data)您改爲撥打.response(...)。)

Alamofire.request(...).responseJSON { response in 
    if let dictionary = response.result.value { 
    let JSONData = JSON(dictionary) 
    let userObjects = JSONData["responses"][0]["labelAnnotations"].arrayValue.map( 
     { $0["description"].stringValue } 
    ) 
    } 
} 
+0

謝謝,效果不錯:) – user3766930