用alamofire swift发布json数组

时间:2019-03-01 10:43:22

标签: ios arrays json swift alamofire

如何用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 {


            }
        }

    }

3 个答案:

答案 0 :(得分:1)

在您的代码更改方法中,将 .put 更改为 .post ,而在其他情况下则不需要SVProgressHUD.dismiss(),因为您已经在其他情况下将其关闭了

此外,您需要将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)
                }
            }
    }

答案 1 :(得分:0)

我希望您的Parameters类遵循Codable协议。

据我所知,您在将对象解析为JSON时遇到错误。因此,这就是错误的根源。

您还可以为您的Parameters类/结构添加代码

答案 2 :(得分:0)

首先,转换您的温度

数组为字符串

而不是在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;
    }

}