如何将 json 数据从 alamofire 转换为 swift 对象
Posted
技术标签:
【中文标题】如何将 json 数据从 alamofire 转换为 swift 对象【英文标题】:How to convert json data from alamofire to swift objects 【发布时间】:2015-06-15 06:39:48 【问题描述】:您好,我正在使用 swift 1.1 在 swift 中制作照片查看器应用程序 xcode 6.2
我在尝试将 json 响应从 alamofire 到 swift objects。我使用了 swiftyjson 库,但似乎 存在兼容性问题。这是我的模型类
import Foundation
struct Photo
var name: String
var filename :String
var notes: String
这是我的视图控制器
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 对象
谢谢。
【问题讨论】:
在 Alamofire 中以 JSON 形式返回什么?如果它是一个类,请查看其源代码并尝试找出一种将每个值手动放入字典中的方法。 【参考方案1】:最好的解决方案是使用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"]
在视图控制器中:
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)
查看AlamofireObjectMapper
和ObjectMapper
的文档了解更多信息。
【讨论】:
【参考方案2】:您可以使用dataUsingEncoding
方法,并从json
对象中获取您的name,filename
和notes
变量,对于解析json 对象,我推荐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)
)
【讨论】:
【参考方案3】:您可以为此使用EVReflection。您可以使用如下代码:
var photo:Photo = Photo(json:jsonString)
或
var jsonString:String = photo.toJsonString()
您只需将基础对象设置为 EVObject。
有关更详细的示例代码(包括数组),请参阅 GitHub 页面。
【讨论】:
我现在也有一个 Alamofire 扩展。见github.com/evermeer/AlamofireJsonToObjects【参考方案4】:如果你不想写映射函数,我建议你看看HandyJSON
。代码示例:
正如它所说:
HandyJSON最显着的特点是它不需要对象继承自NSObject(不是使用KVC而是反射),也没有实现'mapping'函数(使用指针来实现属性赋值)。
【讨论】:
以上是关于如何将 json 数据从 alamofire 转换为 swift 对象的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?
如何将 Alamofire 生成的数据从 tableview 推送到 webview
Alamofire 无法将 NSCFString 类型转换为字典