我要解析这个JSON数据:
{
"data": {
"user_name": "JohP llDoe",
"email_address": "tozto@gmail.com"
},
"result": {
"code": 0
}
}
数据类型从Web服务更改为另一个,但总体结构始终相同。
所以我使用EVReflection创建这个通用类来解析数据:
class MyResponse<T>: EVObject {
var data : T?
var result : Result?
}
class Result: EVObject {
var message : String = ""
var code : Int = 0
}
和数据:
class Preaccount : EVObject {
public var user_name : String = ""
public var email_address : String = ""
}
为了调用我创建此方法的Web服务:
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse<MyResponse<Preaccount>>) in
if response.result.isSuccess {
print(response.result.value!)
}
if response.result.isFailure {
let error : Error = response.result.error!
}
}
现在我的访问权限很差:
是否有办法创建通用方法并在参数中传递已解析的模型。
答案 0 :(得分:1)
你可以试试这个
class MyResponse: EVObject {
var data : Preaccount?
var result : Result?
}
并处理响应数据
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse) in
if response.result.isSuccess {
print(response.result.value!)
var myResponse = MyResponse(json:response.result.value!)
}
.......
}
答案 1 :(得分:0)
最后,这是我解决问题的方法:
struct MyResponse<T: Decodable>: Decodable {
var data : T?
var result : Result?
}
struct Result: Decodable {
let message : String?
let code : Int
let form_errors : [String: [String]]?
}
struct Preaccount : Decodable {
let user_name : String
let email_address : String
}
并致电网络服务:
func postRequest<T: Decodable>(url: String,
params : [String: Any]?,
returnType : T.Type)
{
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseDecodableObject { (response: DataResponse<FindoorResponse<T>>) in
//...
}
}
以下是调用该方法的示例:
AlamofireHelper.shared().postRequest(url: CHECK_USERNAME_URL, params: parameters, returnType: Preaccount.self)
答案 2 :(得分:-1)
我建议改为使用Decodable
:
struct MyResponse<T: Decodable>: Decodable {
let data: T?
let result: Result?
}
struct Result: Decodable {
var message: String?
var code: Int
}
struct Preaccount: Decodable {
let user_name: String
let email_address: String
}
let data = """
{
"data": {
"user_name": "JohP llDoe",
"email_address": "tozto@gmail.com"
},
"result": {
"code": 0
}
}
""".data(using: .utf8)!
let result = try? JSONDecoder().decode(MyResponse<Preaccount>.self, from: data)