json - 将 JSON/NSDictionary 反序列化为 Swift 对象

标签 json swift

有没有办法正确反序列化对 Swift 对象的 JSON 响应。使用 DTO 作为固定 JSON API 的容器?

类似于 http://james.newtonking.com/json 的东西或者类似 Java 中的这个例子

User user = jsonResponse.readEntity(User.class);

其中 jsonResponse.toString() 类似于

{
  "name": "myUser", 
  "email": "user@example.com",
  "password": "passwordHash"
}

最佳答案

SWIFT 4 Update


由于您提供了一个非常简单的 JSON 对象,因此准备好处理该模型的代码。如果您需要更复杂的 JSON 模型,则需要改进此示例。

您的自定义对象

class Person : NSObject {
    var name : String = ""
    var email : String = ""
    var password : String = ""

    init(JSONString: String) {
        super.init()

        var error : NSError?
        let JSONData = JSONString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

        let JSONDictionary: Dictionary = NSJSONSerialization.JSONObjectWithData(JSONData, options: nil, error: &error) as NSDictionary

        // Loop
        for (key, value) in JSONDictionary {
            let keyName = key as String
            let keyValue: String = value as String

            // If property exists
            if (self.respondsToSelector(NSSelectorFromString(keyName))) {
                self.setValue(keyValue, forKey: keyName)
            }
        }
        // Or you can do it with using 
        // self.setValuesForKeysWithDictionary(JSONDictionary)
        // instead of loop method above
    }
}

这就是您使用 JSON 字符串调用自定义类的方式。

override func viewDidLoad() {
    super.viewDidLoad()
    let jsonString = "{ \"name\":\"myUser\", \"email\":\"user@example.com\", \"password\":\"passwordHash\" }"
    var aPerson : Person = Person(JSONString: jsonString)
    println(aPerson.name) // Output is "myUser"
}

关于json - 将 JSON/NSDictionary 反序列化为 Swift 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310324/

相关文章:

python - 将 numpy runtimewarning 捕获为异常并抑制它们

loops - 如何计算并显示结果,循环执行的次数?

ios - 在另一个 UICollectionViewController 中添加一个 UICollectionViewController

c - 链接 C 代码时出现重复符号错误

从 Angularjs 服务调用时,WebApi 中延迟加载的 nHibernate 对象出现 JsonSerializationException

json - 在 golang 中为 JSON 结构创建接口(interface)

python - 将 JSON 转换为 python 数据帧

ios - 约束或其 anchor 是否引用不同 View 层次结构中的项目?那是违法的

ios - Swift - 如何以编程方式旋转 UITableViewHeader 中的 UIImageView

javascript - 将 JSON 转换为数组