2017-04-16 11 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

は、as? ...を使用してタイプチェックの手間を省くため、辞書値がJSONタイプであるかどうかを確認するのが問題です。

私は図書館に慣れていないですが、私はあなたがしなければならないすべてはあると思う:

(あなたがAlamofire.request(...).responseJSON(...)のような.responseJSONメソッドを使用しましたので、response.result.value戻っ辞書を想定すると、そうでない場合は、あなたがいる場合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

関連する問題