AlamofireObjectMapper 返回空的 jsonarray
Posted
技术标签:
【中文标题】AlamofireObjectMapper 返回空的 jsonarray【英文标题】:AlamofireObjectMapper returning empty jsonarray 【发布时间】:2016-06-30 18:47:49 【问题描述】:我的问题是:为什么我的方法返回一个带有 .responseArray
的空 json 数组?
我的 REST-API 有以下 JSON:
[
"id": 1,
"title": "Crazy",
"startDate": "2016-07-16 22:00:00.0",
"endDate": "2016-07-17 03:00:00.0",
"location": "Crazy",
"description": "Crazy",
"avatar": "base64"
,
"id": 2,
"title": "Crazy title",
"startDate": "2016-07-16 22:00:00.0",
"endDate": "2016-07-17 03:00:00.0",
"location": "Crazy",
"description": "Something",
"avatar": "base64"
,
"id": 3,
"title": "Crazy",
"startDate": "2016-07-16 22:00:00.0",
"endDate": "2016-07-17 03:00:00.0",
"location": "Crazy",
"description": "Crazy",
"avatar": "base64"
,
"id": 4,
"title": "Crazy",
"startDate": "2016-07-16 22:00:00.0",
"endDate": "2016-07-17 03:00:00.0",
"location": "Crazy",
"description": "Crazy",
"avatar": "base64"
]
如您所见,json 是一个包含多个对象的数组。
我使用 AlamofireObjectMapper 将 json 映射为对象,但它返回给我一个空数组:
func getEventFromApiWebService(completionHandler: (event: [Event]) -> ())
Alamofire.request(ApiRouter.Get("/events"))
.validate()
.responseArray(completionHandler: (response: Response<[Event], NSError>) in
//Attempt to print result value which returns empty Array
let eventArray = response.result.value
print(eventArray!)
completionHandler(event: response.result.value!)
)
以下代码确实适用于 .responseJSON:
func test()
Alamofire.request(ApiRouter.Get("/events"))
.responseJSON response in
print(response.result.value!)
但是这里没有映射。
事件类:
import ObjectMapper
import RealmSwift
class Event: Object, Mappable
dynamic var id = 0
dynamic var eventID = 0
dynamic var title: String? = nil
dynamic var startDate: NSDate? = nil
dynamic var endDate: NSDate? = nil
dynamic var location: String? = nil
dynamic var desc: String? = nil
dynamic var avatar: NSData? = nil
override static func primaryKey() -> String?
return "id"
required convenience init?(_ map: Map)
self.init()
if map["id"].value() == nil
return nil
if map["title"].value() == nil
title = ""
if map["startDate"].value() == nil
startDate = nil
if map["endDate"].value() == nil
endDate = nil
if map["location"].value() == nil
location = ""
if map["description"].value() == nil
desc = ""
if map["avatar"].value() == nil
avatar = nil
func mapping(map: Map)
self.eventID <- map["id"]
self.title <- map["title"]
self.startDate <- map["startDate"]
self.endDate <- map["endDate"]
self.location <- map["location"]
self.desc <- map["description"]
self.avatar <- map["avatar"]
【问题讨论】:
【参考方案1】:Alamofire 没有responseArray
方法。 https://github.com/Alamofire/Alamofire#response-serialization
使用responseJSON
获取 JSON 并转换为数组。
.responseJSON response in
guard response.result.isSuccess else
//handle error
return
响应序列化
内置响应方法
响应() responseData() responseString(编码:NSStringEncoding) responseJSON(选项:NSJSONReadingOptions) responsePropertyList(options: NSPropertyListReadOptions)required convenience init?(_ map: Map)
self.init()
func mapping(map: Map)
id <- map["id"]
title <- map["title"]
startDate <- map["startDate"]
endDate <- map["endDate"]
【讨论】:
我的错,我正在使用扩展库 github.com/tristanhimmelman/AlamofireObjectMapper 他们在代码 sn-ps 中使用的位置:Alamofire.request(.GET, URL).responseArray。我会在问题中编辑我的图书馆名称,对不起! 谢谢!我会继续寻找解决方案,因为它应该可以与 AlamofireObjectMapper 一起使用! 需要导入AlamofireObjectMapper
吗?
是的,但我找到了解决方案!感谢您抽出宝贵时间回复!
如果我从 ARC 发出请求,它会在数据到来时从服务器返回空响应。【参考方案2】:
事实证明,我的事件类中的 DataTypes 不适合 JSON。
在required convenience init?(_ map: Map)
的某个地方,它给了我一个零,因此拒绝反序列化整个 JsonArray。
【讨论】:
也许我更新的答案可以帮助您更多地了解映射。以上是关于AlamofireObjectMapper 返回空的 jsonarray的主要内容,如果未能解决你的问题,请参考以下文章
如何实例化映射类? (迅速 - alamofireObjectMapper)
如何在 AlamofireObjectMapper 中映射对象