how to parse this json in swift?

前端 未结 3 1525
被撕碎了的回忆
被撕碎了的回忆 2020-12-07 06:58

I have a request

Alamofire.request(.GET,HttpHelper.baseURL+HttpHelper.tripsURL,encoding:.JSON).responseJSON {
response in 

    var json  = JSON(data: respon         


        
相关标签:
3条回答
  • 2020-12-07 07:10

    Basically, it would be:

    class User {
      var name : String?
      var lastName : String?
    }
    
    var theUsers = [User]()
    
    Alamofire.request(.GET,HttpHelper.baseURL+HttpHelper.tripsURL,encoding:.JSON)
      .responseJSON { response in 
        var json  = JSON(data: response.data!)
        print(json)
    
        theUsers = json["res"].map {
          return User (name: $0["name"], lastName: $0.["lastName"])
        }
      })
    

    However, along the way, you might need some typecasting. For example, maybe replace json["res"] with (json["res"] as Array<Dictionary<String,String>>) in order to keep the type checker and type inferencer happy.

    0 讨论(0)
  • 2020-12-07 07:12

    You can do something like that

    var result: [User]()
    for user in json["res"] {
       let userTmp = User(name: user["name"], lastName: user["lastName"])
       result.append(userTmp)
    }
    

    Regards

    0 讨论(0)
  • 2020-12-07 07:12

    I'm using native Codable protocol to do that:

    class MyClass: Codable {
    
        var int: Int?
        var string: String?
        var bool: Bool?
        var double: Double?
    }
    
    
    let myClass = MyClass()
    myClass.int = 1
    myClass.string = "Rodrigo"
    myClass.bool = true
    myClass.double = 2.2
    
    if let json = JsonUtil<MyClass>.toJson(myClass) {
        print(json) // {"bool":true,"string":"Rodrigo","double":2.2,"int":1}
    
        if let myClass = JsonUtil<MyClass>.from(json: json) {
            print(myClass.int ?? 0) // 1
            print(myClass.string ?? "nil") // Rodrigo
            print(myClass.bool ?? false) // true
            print(myClass.double ?? 0) // 2.2
        }
    }
    


    And I created a JsonUtil to help me:

    public struct JsonUtil<T: Codable>  {
    
        public static func from(json: String) -> T? {
            if let jsonData = json.data(using: .utf8) {
                let jsonDecoder = JSONDecoder()
    
                do {
                    return try jsonDecoder.decode(T.self, from: jsonData)
    
                } catch {
                    print(error)
                }
            }
    
            return nil
        }
    
        public static func toJson(_ obj: T) -> String? {
            let jsonEncoder = JSONEncoder()
    
            do {
                let jsonData = try jsonEncoder.encode(obj)
                return String(data: jsonData, encoding: String.Encoding.utf8)
    
            } catch {
                print(error)
                return nil
            }
        }
    }
    

    And if you have some issue with Any type in yours objects. Please look my other answer:

    https://stackoverflow.com/a/51728972/3368791

    Good luck :)

    0 讨论(0)
提交回复
热议问题