在Alamofire请求的正文中发送JSON数据

pat*_*382 3 alamofire swift3

我正在尝试使用Alamofire(版本4.0)提交api调用来提交一些数据.我遇到的麻烦是,在进行调用时,我从服务器得到JSON数据不是有效格式的响应.

有没有办法检查数据数据是否在Alamofire中正确序列化?

我已经尝试了当前StackOverflow上的许多解决方案,但无法找到解决方案.谢谢你的帮助.

这应该是请求正文的格式:

{
"reference_id": "Test001",
"data": {
    "type": "step",
    "data": {
        "2015-08-02": 8574
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我的Swift代码:

let params: [String:Any] = [
        "reference_id": "someName",
        "data": [
            "type" : "step",
            "data": [
                "2015-08-02": 8574
            ]
        ]
    ]

    print(params)

    if let userToken = userToken {
        let request = Alamofire.request(url+"API.php?Action=SaveHealthData", method: .post, parameters: params, encoding: JSONEncoding.default).responseString(completionHandler: { response in
            print(response)
        })
    }
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

警告:json_decode()期望参数1为字符串,第8行的/var/www/html/API/SaveHealthData.php中给出的数组 {"error":"数据不是有效的json格式"}

jun*_*dhu 9

这是你的问题的解决方案,

var dataDict : [String : Any] = [:];

dataDict["type"] = "Step"
dataDict["data"] = ["2015-08-02": 8574];

let params: [String:Any] = ["reference_id": "someName",
                            "data": String.toJSonString(data: dataDict)];
Run Code Online (Sandbox Code Playgroud)

这里toJSonString是String的扩展

static func toJSonString(data : Any) -> 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;
}
Run Code Online (Sandbox Code Playgroud)

快乐的编码