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

标签 swift3 alamofire

我正在尝试使用 Alamofire(4.0 版)进行 api 调用以提交一些数据。我遇到的问题是,在调用电话时,我收到来自服务器的响应,即 JSON 数据的格式无效。

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

我已经尝试了 StackOverflow 上当前的许多解决方案,但找不到解决方案。感谢您的帮助。

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

{
"reference_id": "Test001",
"data": {
    "type": "step",
    "data": {
        "2015-08-02": 8574
    }
}
}

我的 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)
        })
    }

我得到的错误是:

Warning: json_decode() expects parameter 1 to be string, array given in /var/www/html/API/SaveHealthData.php on line 8
{"error":"data not in valid json format"}

最佳答案

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

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)];

这里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;
}

快乐的编码

关于swift3 - 在 Alamofire 请求的正文中发送 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41228344/

相关文章:

ios - swift 3 [字符串 : AnyObject] Expression was too complex Error

ios - 动画 UIButton 的文本以捏合和捏开不起作用

Swift3 使用未解析的标识符 'Date'

iOS 13 - 没有文本 Swift 的自定义后退按钮

swift - 使用 Swifty 在 Swift 中将 JSON 作为字符串返回

ios - 无法调用 Alamofire.request(...)

ios - 如何使用 swift 在 UITableview 的 Collection View 中填充不同的数组值?

swift - 无法将带有数组的字典传递给 swift 中的请求正文

ios - Alamofire:无论 timoutIntervalForRequest 如何,1 秒内为 'The request timed out'

ios - 使用多部分请求上传文件 - Swift 4