使用 Rx 编程 Moya 将 JSON 响应映射到对象
Posted
技术标签:
【中文标题】使用 Rx 编程 Moya 将 JSON 响应映射到对象【英文标题】:Mapping JSON response to objects using Rx programming Moya 【发布时间】:2017-07-01 15:16:48 【问题描述】:我正在尝试像这样使用 ModelMapper 库的 mapObject 函数:
return provider.request(API.userInfo(userId: API.userId))
.mapObject(type: UserTest.self, keyPath: "user")
使用这个 Json :
"success": true,
"user":
"_id": "HJzCZaXEW",
"mail": "Valentin",
"__v": 0,
"bikes": [
"S1rjHamNZ",
"HkxhHpXEZ"
],
"updated": "2017-06-30T12:19:22.016Z",
"created": "2017-06-30T12:19:22.015Z"
我试过用这种方式看看有什么错误:
API.getUserInfo()
.subscribe event in
switch event
case .next(let response):
print(response)
case .error(let error):
print("error")
print(error)
default:
print("default")
我在控制台中得到了这个:
error
jsonMapping(Status Code: 200, Data Length: 177)
这是我的映射结构:
import Mapper
struct UserTest: Mappable
var name: String
var lastname: String
var mail: String
var bikes: [String]
init(map: Mapper) throws
try name = map.from("name")
try lastname = map.from("lastname")
try mail = map.from("mail")
try bikes = map.from("bikes")
我也尝试了 pod 更新,但没有任何改变。 我真的不明白为什么它不起作用。
提前感谢您的帮助!
【问题讨论】:
为什么不使用可解码协议? 您好,您所说的可解码协议是什么意思? 你现在实际上不需要映射器,Swift 4 引入了可解码协议来将 json 解析为自定义类型 好的,我只是在学习本教程:thedroidsonroids.com/blog/ios/rxswift-examples-3-networking 这就是我使用 ModelMapper 的原因,它是 Moya 的扩展 【参考方案1】:问题出在这几行
try name = map.from("name")
try lastname = map.from("lastname")
你的 json 数据没有有这两个键,“name”和“lastname”。如果数据可能为空或存在,请尝试删除这两行或将两者都设为“可选”
lastname = map.optionalFrom("lastname")
【讨论】:
以上是关于使用 Rx 编程 Moya 将 JSON 响应映射到对象的主要内容,如果未能解决你的问题,请参考以下文章