//这是我需要解析的json响应。
//我需要以下代码值作为条件。
{
Code = 0;
Message = "Login Fail";
}
答案 0 :(得分:1)
{
Code = 0;
Message = "Login Fail";
}
{
"Code" : 0,
"Message" : "Login Fail"
}
Swift 4具有一个非常好的协议,称为Decodable
和JSONDecoder
。这些是Foundation
的新功能。
struct ErrorResponse: Decodable {
var code: String?
var message: String?
enum CodingKeys : String, CodingKey {
case code = "Code"
case message = "Message"
}
}
不使用可选选项的替代声明
struct ErrorResponse: Decodable {
var code: String
var message: String
enum CodingKeys : String, CodingKey {
case code = "Code"
case message = "Message"
}
}
Apple还提供了正确使用Decodable
和CodingKey
here
通知:此处如何使用CodingKeys
表示小写但从服务器接收到的属性是大写的。您可以使用CodingKey
对属性进行编码和解码,以符合您自己的命名约定。
guard let responseError = try? JSONDecoder().decode(ErrorResponse.self, from: data) else {
print("Error: Could not parse JSON")
return
}
print("code: \(responseError.code)")
print("message: \(responseError.message)")
答案 1 :(得分:-1)
好吧,您可以使用ObjectMapper swift库轻松地将对象模型与JSON相互转换:
要对其进行分解:
使用CocoaPods将ObjectMapper库添加到您的项目中:
pod 'ObjectMapper', '~> 3.3'
定义实现Mappable协议的新类或结构(模型),并指出您必须通过实现他的两个方法来遵守Mappable协议:
class Response: Mappable {
var code: Int?
var message: String?
required init?(map: Map) { }
// Mappable
func mapping(map: Map) {
code <- map["code"]
message <- map["message"]
}
}
解析API响应并将Dictionary响应转换为响应模型对象:
if let data = resultDictionary["response"] as? Dictionary<String, AnyObject> {
let response = Mapper<Response>().map(JSONObject: data)
print("code = \(response.code)")
print("message = \(response.message.)")
}
}
响应模型是可映射的对象,其中包含代码和消息。