这是我的JSON响应值:
{
"_embedded": {
"task": [
{
"_embedded": {
"variable": [
{
"_links": {
"self": {
"href": "/process-instance/412a03b7-06ae-11ea-8860-120ef5ab2c25/variables/loanAmount"
}
},"_embedded": null,"name": "loanAmount","value": "650000","type": "String","valueInfo": {}
}
]
},"id": "412a2aca-06ae-11ea-8860-120ef5ab2c25","name": "Quick Evaluation","assignee": "demo","created": "2019-11-14T07:13:27.558+0000","processDefinitionId": "quickEvaluation:1:129ce2b1-0616-11ea-8860-120ef5ab2c25"
}
]
},"count": 13
}
这是结构可编码代码:
import Foundation
public struct TaskID: Codable {
let embedded: Embedded
}
public struct Embedded: Codable {
let task: [Task]
}
public struct Task : Codable {
let embedded: EmbeddedVariable
let id : String
let name: String
let assignee: String
let created: String
let processDefinitionId: String
}
public struct EmbeddedVariable: Codable {
let variable : [Variables]
}
public struct Variables: Codable {
let value : String
let name: String
}
我尝试过encodingKey,也尝试使用_embedded。面对同样的问题。
错误日志:由于错误而无法解码响应:
Alamofire.AFError.
ResponseSerializationFailureReason.decodingFailed(error: Swift.DecodingError.typeMismatch(Swift.Dictionary<Swift.String,Any>,Swift.DecodingError.Context(codingPath: [],debugDescription: "Expected to decode Dictionary<String,Any> but found an array instead.",underlyingError: nil)))))
由于数据格式不正确,因此无法读取。
这是JSONSerialization的代码:
// MARK: - URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let url = try K.ProductionServer.baseURL.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
print(urlRequest)
// HTTP Method
urlRequest.httpMethod = method.rawValue
let authToken = UserDefaults.standard.string(forKey: "authToken")
let bearerToken: String = "Bearer " + (authToken ?? "")
print("baearer token::\(bearerToken)")
// Common Headers
urlRequest.setvalue(ContentType.json.rawValue,forHTTPHeaderField: HTTPHeaderField.acceptType.rawValue)
urlRequest.setvalue(ContentType.json.rawValue,forHTTPHeaderField: HTTPHeaderField.contentType.rawValue)
urlRequest.setvalue(bearerToken,forHTTPHeaderField: HTTPHeaderField.authentication.rawValue)
// Parameters
if let parameters = parameters {
do {
urlRequest.httpBody = try JSONSerialization.data(withJSONObject: parameters,options: [])
} catch {
throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
}
}
return urlRequest
}
这是代码json返回响应:
import Foundation
import Alamofire
public class APIClient {
@discardableResult
private static func performRequest<T:Decodable>(route:APIRouter,decoder: JSONDecoder = JSONDecoder(),completion:@escaping (AFResult<T>)->Void) -> DataRequest {
return AF.request(route)
.responseDecodable (decoder: decoder){ (response: AFDataResponse<T>) in
completion(response.result)
print("framework response::",response.result)
}
}
public static func taskID(id: String,completion:@escaping (AFResult<MyTaskData>)->Void) {
performRequest(route: APIRouter.TaskById(id: id),completion: completion)
}
}//APIClient