如何将json数据从alamofire转换为swift对象

嗨在那里即时使用swift 1.1在Xcode 6.2中快速的照片查看器应用程序

我有麻烦试图从alamofire转换json响应swift对象。我已经使用swiftyjson库,但似乎有一个兼容性issues.here是我的模型类

import Foundation struct Photo { var name: String var filename :String var notes: String } 

这里是我的viewController

  import UIKit class ImageViewerTableViewController: UITableViewController { var photos = [Photo]() override func viewDidLoad() { super.viewDidLoad() Alamofire.request(.GET, "http://httpbin.org/get") .responseJSON { (_, _, JSON, _) in } } 

如何在这种情况下将json映射到swift对象

谢谢 。

最好的解决scheme是使用AlamofireObjectMapper

你的代码应该是这样的:

 import Foundation import ObjectMapper struct Photo: Mappable { var name: String var filename :String var notes: String required init?(map: Map) {} func mapping(map: Map) { self.name <- map["name"] self.filename <- map["filename"] self. notes <- map["notes"] } } 

在viewController中:

 import UIKit class ImageViewerTableViewController: UITableViewController { var photos = [Photo]() override func viewDidLoad() { super.viewDidLoad() Alamofire .request(.GET, "http://httpbin.org/get") .responseArray { (response: Response<[Photo], NSError>) in if let myPhotos = response.result.value { print(myPhotos) } } } } 

查看AlamofireObjectMapperObjectMapper的文档以获取更多信息。

你可以使用EVReflection 。 你可以使用如下代码:

 var photo:Photo = Photo(json:jsonString) 

要么

 var jsonString:String = photo.toJsonString() 

您只需将您的基础对象设置为EVObject。

有关更详细的示例代码(包括数组),请参阅GitHub页面。

如果你不想写映射函数,我build议你看看HandyJSON 。 一个代码示例:

结构动物:HandyJSON {
     var name:String?
     var id:String?
     var num:Int?
 }

让jsonString =“{\”name \“:\”cat \“,\”id \“:\”12345 \“,\”num \“:180}

如果让动物= JSONDeserializer.deserializeFrom(json:jsonString){
    打印(动物)
 }

正如它所说:

HandyJSON最显着的特点是它不需要从NSObjectinheritance的对象(不使用KVC而是reflection),既不实现“映射”function(使用指针来实现属性分配)。

你可以使用dataUsingEncoding方法,并从json对象获取你的name,filenamenotesvariables,并且为了parsingjson对象,我推荐SwiftyJSON

 Alamofire.request(.GET, "http://httpbin.org/get", parameters: nil, encoding: .URL).responseString(completionHandler: { (request: NSURLRequest, response: NSHTTPURLResponse?, responseBody: String?, error: NSError?) -> Void in // Convert the response to NSData to handle with SwiftyJSON if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding) { let json = JSON(data: data) println(json) } })