2017-07-05 10 views
0

swson 3.0でjsonデータを解析しようとしています。私はここでAlamofire 4.0+ を使用しています。ここスワップでJSONデータを解析する

{ 
"token": 

"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MDQ0MjgzNzgxMTF9.CNonyvtQbRgaqqkdPO5KwqpVaUmlGrpaTqlBxmvaX80", 

"expires": 1504428378111, 

"user": 
[{"user_id":13,"user_first_name":"Himanshu","user_last_name":"Srivastava","full_name":"Himanshu Srivastava"}] 
} 

私のJSONである私のモデルクラスは、インターネット上で利用可能な解決策のどれもが私のために働いていない、これらの値

import Foundation 
import ObjectMapper 
class LoginResult:Mappable{ 
    var token:String? 
    var expires:Double? 
    var users:[[String:Any]]? 
    required init?(map:Map){ 

    } 

    func mapping(map:Map)->Void{ 
     self.token <- map["token"] 
     self.expires <- map["expires"] 
     self.users <- map["user"] 
    } 
} 

を保持することです。このjsonを解析してモデルクラスにマップするにはどうすればよいですか? ここにお手伝いしますか?

+1

キー 'user'の値が配列を表す別のネストされたJSON文字列であると思われますが、担当している場合。サーバー側がデータのフォーマットを変更し、* real * arraを送信するy。 – vadian

+3

jsonの形式が正しくありません。ユーザーの下に配列を置くことはできますが、なぜそれが二重引用符の中にあるのですか? –

+0

データをjsonに変換する必要がありますか? –

答えて

0

ここでは、地図を辞書で置き換えた回答があります。エラーを処理するか、慎重にアンラップ:)

let str = "{\"token\": \"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MDQ0MjgzNzgxMTF9.CNonyvtQbRgaqqkdPO5KwqpVaUmlGrpaTqlBxmvaX80\",\"expires\": 1504428378111,\"user\": [{\"user_id\":13,\"user_first_name\":\"Himanshu\",\"user_last_name\":\"Srivastava\",\"full_name\":\"Himanshu Srivastava\"}]}" 

let data = str.data(using: .utf8) 

do{ 
    let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String: Any] 

    //Pass this json into the following function 
}catch let error{ 

} 

func mapping(json:[String: Any]?)->Void{ 
    self.token <- json?["token"] as? String 
    self.expires <- json?["expires"] as? Double 
    self.users <- json?["user"] as? [[String: Any]] 
} 
2

は私が間違っていたことを忘れてはいけない、キーuserの値は実際に規則的な配列です。

これは方法によって、キーexpiresの値がIntいうよりDouble)です(サード・パーティ・マッパーがなく、余分なUser構造体を持つソリューションです。userデータを仮定 は、常にすべてのフィールド送信のデータベースから来ていますユーザーキーが開封された強制され、これはまたuserデータの結合オプションのケースでの使用ではない場合:。

struct User { 
    let firstName : String 
    let lastName : String 
    let fullName : String 
    let userID : Int 
} 

class LoginResult { 
    let token : String 
    let expires : Int 
    var users = [User]() 

    init(json : [String:Any]) { 
     self.token = json["token"] as? String ?? "" 
     self.expires = json["expires"] as? Int ?? 0 
     if let users = json["user"] as? [[String:Any]] { 
      self.users = users.map { User(firstName: $0["user_first_name"] as! String, 
              lastName: $0["user_last_name"] as! String, 
              fullName: $0["full_name"] as! String, 
              userID: $0["user_id"] as! Int) 
      } 
     } 
    } 
} 

let json = "{\"token\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MDQ0MjgzNzgxMTF9.CNonyvtQbRgaqqkdPO5KwqpVaUmlGrpaTqlBxmvaX80\",\"expires\":504428378111,\"user\":[{\"user_id\":13,\"user_first_name\":\"Himanshu\",\"user_last_name\":\"Srivastava\",\"full_name\":\"Himanshu Srivastava\"}]}"  
let jsonData = json.data(using: .utf8)!  
do { 
    if let userData = try JSONSerialization.jsonObject(with: jsonData) as? [String:Any] { 
     let loginResult = LoginResult(json: userData) 
     print(loginResult.users[0]) 
     // do something with loginResult 
    }   
} catch { 
    print(error) 
} 
関連する問題