有一个 API,它将其响应包装在一个带有status
值和data
值的关联数组中,其中data
包含错误对象或预期值:
不良反应:
{
"status":"error",
"data":{
"errormessage":"Duplicate entry '101' for key 'PRIMARY'",
"errorcode":1062
}
}
成功响应:
{
"status":"success",
"data":{
"user": {
"id": 1,
}
}
}
我想验证这些响应:
public class func validateResponse(_ data : Data) -> WebServicesError?
{
struct WTPResponse : Decodable
{
let status : String
let data : Data
}
do {
let response = try JSONDecoder().decode(WTPResponse.self, from: data) // FAILS HERE
if let wtpError = try? JSONDecoder().decode(WTPAPIError.self, from: response.data) {
return WebServicesError.wtpError(WTPAPIError(code: wtpError.code, message: wtpError.message))
}
}
catch let error {
return WebServicesError.init(error: error)
}
return nil
}
尝试解码带有错误的响应对象时总是失败:Expected to decode Data but found a dictionary instead.
我在想我可以将data
对象解码为 Swift 类型Data
,但它实际上是一个[String: Any]
字典。
1) 如何验证Data
我从 API 收到的信息?
2)有没有一种方法可以只提取data
JSON响应的“”部分作为Data
类型,这样我就可以解码User
对象而不必给它一个status
和data
属性?