我有这样的课程:
class MyDate
{
var year : String = ""
var month : String = ""
var day : String = ""
init(year : String , month : String , day : String) {
self.year = year
self.month = month
self.day = day
}
}
class Lad
{
var firstName : String = ""
var lastName : String = ""
var dateOfBirth : MyDate?
init(firstname : String , lastname : String , dateofbirth : MyDate) {
self.firstName = firstname
self.lastName = lastname
self.dateOfBirth = dateofbirth
}
}
class MainCon {
func sendData() {
let myDate = MyDate(year: "1901", month: "4", day: "30")
let obj = Lad(firstname: "Markoff", lastname: "Chaney", dateofbirth: myDate)
let api = ApiService()
api.postDataToTheServer(led: obj)
}
}
class ApiService {
func postDataToTheServer(led : Lad) {
// here i need to json
}
}
我想将 Lad
对象转换为JSON字符串,如下所示:
{“firstName”:“Markoff”,“lastName”:“Chaney”,“dateOfBirth”:{“year”:“1901”,“month”:“4”,“day”:“30”}}
2 回答
编辑 - 10/31/2017:这个答案主要适用于Swift 3和可能的早期版本 . 截至2017年底,我们现在拥有Swift 4,您应该使用Encodable和Decodable协议在表示之间转换数据,包括JSON和文件编码 . (您可以添加Codable协议以使用编码和解码)
在Swift中使用JSON的常用解决方案是使用字典 . 所以你可以这样做:
然后使用
JSONSerialization
序列化字典格式的数据 .如果你只需要为几个类做这个,提供将它们变成字典的方法是最可读的选项,并不会使你的应用程序显着增大 .
但是,如果您需要将许多不同的类转换为JSON,那么写出如何将每个类转换为字典将会很繁琐 . 因此,使用某种反射API以便能够列出对象的属性会很有用 . 最稳定的选择似乎是EVReflection . 使用EVReflection,对于我们想要变成json的每个类,我们可以这样做:
然后,就像之前一样,我们可以使用
JSONSerialization
将我们刚刚获得的字典序列化为JSON . 我们只需要使用object.toDictionary()
而不是object.dataDictionary
.如果您不想使用
EVReflection
,则可以使用Mirror类自己实现反射(能够查看对象具有哪些字段并迭代它们) . 有一个解释如何为此目的使用镜像here .因此,定义了
.dataDictionary
计算变量或使用EVReflection
的.toDictionary()
方法,我们可以做愿这个GitHub代码能为您提供帮助 .
https://github.com/anumothuR/SwifttoJson