我是Swift 4的新手,试图弄清楚如何自动将Json转换为swift对象,就像java中的Gson一样。是否有任何我可以使用的插件可以将我的json转换为对象,反之亦然。我曾尝试使用SwiftyJson库,但无法理解直接将json转换为对象映射器的语法是什么。在Gson转换如下:
String jsonInString = gson.toJson(obj);
Staff staff = gson.fromJson(jsonInString, Staff.class);
你能为我这样的初学者建议一些非常简单的例子。以下是我的快速课程:
class Person {
let firstName: String
let lastName: String
init(firstName: String, lastName: String) {
self.firstName = firstName
self.lastName = lastName
}
}
下面是从服务器获取响应的方法调用:
let response = Helper.makeHttpCall(url: "http://localhost:8080/HttpServices/GetBasicJson", method: "PUT", param: interestingNumbers)
在响应变量我得到json:
{
"firstName": "John",
"lastName": "doe"
}
Swift中不再需要外部库。从Swift 4开始,有两种协议可以实现您所需要的:Decodable和Encodable,它们分为Codable类型,以及JSONDecoder。
你只需要创建一个符合Codable
的实体(在这个例子中Decodable
就足够了)。
struct Person: Codable {
let firstName, lastName: String
}
// Assuming makeHttpCall has a callback:
Helper.makeHttpCall(url: "http://localhost:8080/HttpServices/GetBasicJson", method: "PUT", param: interestingNumbers, callback: { response in
// response is a String ? Data ?
// Assuming it's Data
let person = try! decoder.decode(Person.self, for: response)
// Uncomment if it's a String and comment the line before
// let jsonData = response.data(encoding: .utf8)!
// let person = try! decoder.decode(Person.self, for: jsonData)
print(person)
})
更多信息: