如何实现json string mapper swift对象?
class User{
var name:String
var age:Int
}
将User对象转换为json字符串的简便方法? 并将json字符串转换为User对象?
答案 0 :(得分:1)
查看SwiftyJSON doc有关初始化的信息 https://github.com/SwiftyJSON/SwiftyJSON#initialization
基本上你唯一的选择是编写一个方法将你的对象转换成一个字典,另一个可以用字典构建你的对象。
两个属性的简单示例用户:
class User {
var name:String
var age:Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
extension User {
convenience init(userDict: [String : AnyObject]) {
let name = userDict["name"] as! String
let age = userDict["age"] as! Int
self.init(name: name, age: age)
}
func serialize() -> [String : AnyObject] {
return ["name": name, "age": age]
}
}
然后,如果你想在你的应用程序周围传递json字符串,你可以查看
NSJSONSerialization.dataWithJSONObject
NSString(data: yourdata, encoding: NSUTF8StringEncoding)
生成一个json字符串。还有NSJSONSerialization.JSONObjectWithData
以相反的方式转换您的数据。
希望有所帮助!
编辑: 要返回包含JSON的字符串,请使用以下命令替换serialize方法:
func serialize() -> String? {
if let data = try? NSJSONSerialization.dataWithJSONObject(["name": name, "age": age], options: NSJSONWritingOptions(rawValue: 0)) {
if let s = NSString(data: data, encoding: NSUTF8StringEncoding) {
return s as String
}
}
return nil
}
答案 1 :(得分:1)
我曾经通过设置每个变量的键和值来创建一个SwiftyJSON JSON对象,但是对于我所创建的每个类来说它都很乏味,并且当你向它添加新变量时它不灵活,所以我发现了一个更好的Swift 2.0的方式。
使用Swift 2.0,他们引入了一个名为Mirror的类。通过使用它,您可以迭代遍历let和变量:
class User {
var name:String
var age:Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
var json: JSON {
get {
var dict = [String: AnyObject]()
let mirror = Mirror(reflecting: self)
for (_, attr) in mirror.children.enumerate() {
if let property_name = attr.label as String! {
dict[property_name] = attr.value as? AnyObject
}
}
return JSON(dict)
}
}
}
因此,如果您想获得声明的变量和值的JSON版本:
let user1 = User(name: "Bob", age: 52)
print(user1.json)
这会让你:
{
"age" : 52,
"name" : "Bob"
}
要获取字符串,请查看this answer:
user1.json.rawString()!