【发布时间】:2015-12-08 09:49:59
【问题描述】:
如何实现json字符串映射器swift对象?
class User{
var name:String
var age:Int
}
将用户对象转换为 json 字符串的简单方法? 并将 json 字符串转换为 User 对象?
【问题讨论】:
如何实现json字符串映射器swift对象?
class User{
var name:String
var age:Int
}
将用户对象转换为 json 字符串的简单方法? 并将 json 字符串转换为 User 对象?
【问题讨论】:
我曾经通过为每个变量设置键和值来创建一个 SwiftyJSON JSON 对象,但是对于我创建的每个类都感觉很乏味,并且在向它添加新变量时不灵活,所以我找到了一个更好的Swift 2.0 的方式。
在 Swift 2.0 中,他们引入了一个名为 Mirror 的类。通过使用它,您可以像这样迭代您的让和变量:
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()!
【讨论】:
查看关于初始化的 SwiftyJSON 文档 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 的字符串,请使用以下替换序列化方法:
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
}
【讨论】: