SwiftyJSON将json字符串实现为swift对象

时间:2015-12-08 09:50:00

标签: json swift

如何实现json string mapper swift对象?

class User{
      var name:String
      var age:Int
}

将User对象转换为json字符串的简便方法? 并将json字符串转换为User对象?

2 个答案:

答案 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()!