SwiftyJSON 实现 json 字符串到 swift 对象

Posted

技术标签:

【中文标题】SwiftyJSON 实现 json 字符串到 swift 对象【英文标题】:SwiftyJSON to implement json string to swift object 【发布时间】:2015-12-08 09:49:59 【问题描述】:

如何实现json字符串映射器swift对象?

class User
      var name:String
      var age:Int

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

【问题讨论】:

【参考方案1】:

我曾经通过为每个变量设置键和值来创建一个 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()!

【讨论】:

我按照你做的,但是我得到了一个空的 json 字符串。 @fcbflying 我只是使用 SwiftyJSON 将自己的代码复制并粘贴到一个空项目上,它就可以工作了。你有什么改变吗? 我添加了一个“?”在我的财产的尽头。当我删除它时,它可以工作。 如何将json字符串 "age" : 52, "name" : "Bob" 转换为用户? 不幸的是,这不适用于“?”或“可选”。对于第二部分,我会尽快回复您。【参考方案2】:

查看关于初始化的 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
  

【讨论】:

如你提供的,将swift对象转换为json字符串时如何调用它,我是一个ios新手。

以上是关于SwiftyJSON 实现 json 字符串到 swift 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftyJSON 获取字符串元素数组?

Swift:如何将带有 Alamofilre 或 SwiftyJSON 的 JSON 字符串转换为 ObjectMapper?

SwiftyJSON - 无法从 JSON 字符串获取 transactionId

尝试使用 swiftyJSON 快速解析 JSON

使用 SwiftyJSON 将元组数组转换为 JSON 字符串

使用 SwiftyJSON 选择字符串数组