Alamofire Post 带有嵌套 JSON 参数的请求
Alamofire Post Request with nested JSON parameters
我的 Alamofire post 请求如下所示:
Alamofire.request("http://...", method: HTTPMethod.post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
.responseJSON(completionHandler: {(response) in ... })
如果我的参数很简单,一切正常:
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe"
]
如果我的参数包含 json 对象,我 运行 就会遇到问题。
let address: JSON = [
"street": "1234 Fake St",
"city": "Seattle",
"state": "WA"
]
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address
]
Alamofire 请求未执行,我的应用程序崩溃。
我认为这里的问题是 Alamofire 正在尝试将参数编码为 json,而该参数已经是 json 对象。本质上,双重编码会导致应用程序崩溃。
我找到的解决方案是在使用 SwiftyJSON 的 .rawValue
.
执行请求之前解码 json 参数
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address.rawValue
]
对于那些不使用 SwiftyJSON 的人,Parameters 类型也接受 Parameters 类型,如下所示:
let address: Parameters = [
"street": "1234 Fake St",
"city": "Seattle",
"state": "WA"
]
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address
]
我的 Alamofire post 请求如下所示:
Alamofire.request("http://...", method: HTTPMethod.post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
.responseJSON(completionHandler: {(response) in ... })
如果我的参数很简单,一切正常:
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe"
]
如果我的参数包含 json 对象,我 运行 就会遇到问题。
let address: JSON = [
"street": "1234 Fake St",
"city": "Seattle",
"state": "WA"
]
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address
]
Alamofire 请求未执行,我的应用程序崩溃。
我认为这里的问题是 Alamofire 正在尝试将参数编码为 json,而该参数已经是 json 对象。本质上,双重编码会导致应用程序崩溃。
我找到的解决方案是在使用 SwiftyJSON 的 .rawValue
.
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address.rawValue
]
对于那些不使用 SwiftyJSON 的人,Parameters 类型也接受 Parameters 类型,如下所示:
let address: Parameters = [
"street": "1234 Fake St",
"city": "Seattle",
"state": "WA"
]
let parameters: Parameters = [
"firstName": "John",
"lastName": "Doe",
"address": address
]