使用 alamofire swift 发布 json 数组
Posted
技术标签:
【中文标题】使用 alamofire swift 发布 json 数组【英文标题】:post array of json with alamofire swift 【发布时间】:2019-03-01 10:43:22 【问题描述】:如何在 swift 中使用 alamofire 发布 json 对象数组?
我的最终数据(我想发布)看起来像:
temp = [
"time": 1,
"score": 20,
"status": true,
"answer": 456
,
"time": 0,
"score": 0,
"status": false,
"answer": 234
,
"time": 0,
"score": 20,
"status": true,
"answer": 123
]
我得到提示,我必须创建自定义参数编码,但我很困惑我该怎么做。有人请帮帮我。
my current code looks like
let parameters: Parameters = [
"answers": temp,
"challenge_date": "2019-03-01"
]
Alamofire.request("...url", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
.responseJSON
response in
if
let status = response.response ? .statusCode
let classFinal: JSON = JSON(response.result.value!)
if (status > 199 && status < 300)
self.dismiss(animated: true)
else
【问题讨论】:
我猜 temp 是你的数组。您遇到的任何错误? 您需要以array & dict的格式发送temp。仔细看,将[ ... ]
视为数组,将 ...
视为字典。现在用这个设置 answers 值。 注意 您的 post req 参数数据始终在数组中,而不是 json。
@GaneshSomani “JSON 解析错误 - 无法解码 JSON 对象”
您的Parameters
类是如何实现的。这就是你的错误的根源。
请查看已编辑的问题。这是我的最后一个案例。
【参考方案1】:
在您的代码更改方法 .put 到 .post,而不需要 SVProgressHUD.dismiss()
in else,因为您在 if else 部分之前已经关闭
另外,您需要将您的 JSON 字符串(临时变量)转换为数组,然后使用参数传递。
let parameters: Parameters = [
"answers": temp,
"challenge_date": "2019-03-01"
]
Alamofire.request("...url", method: .post, parameters: parameters, encoding: JSONEncoding.default , headers: headers)
.responseJSON response in
if let status = response.response?.statusCode
let classFinal : JSON = JSON(response.result.value!)
SVProgressHUD.dismiss()
if status > 199 && status < 300
self.dismiss(animated: true)
【讨论】:
是的。仍然收到错误“JSON 解析错误 - 无法解码 JSON 对象” temp是你的JSON字符串吧 先跟邮递员核对一下你的请求和参数,正常吗?【参考方案2】:我希望你的Parameters
类遵循Codable
协议。
据我所知,您在将该对象解析为 JSON 时遇到错误。因此,这就是您的错误的根源。
您能否也为您的Parameters
类/结构添加代码
【讨论】:
【参考方案3】:首先,转换你的 Temp
数组转换成字符串
而不是将其传入 Alamofire 的参数中。
extension NSArray
func toJSonString(data : NSArray) -> String
var jsonString = "";
do
let jsonData = try JSONSerialization.data(withJSONObject: data, options: .prettyPrinted)
jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String
catch
print(error.localizedDescription)
return jsonString;
【讨论】:
temp 是 json 数组而不是字典 现在传递你的数组并获取字符串。以上是关于使用 alamofire swift 发布 json 数组的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:如何使用 Alamofire 在参数中发布文件?