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

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

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

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

【问题讨论】:

    标签: json swift


    【解决方案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新手。
    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多