有没有办法正确反序列化对 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"
}
最佳答案
由于您提供了一个非常简单的 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/