我正在尝试使用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)
})
}
我得到的错误是:
警告:json_decode()期望参数1为字符串,数组在 /var/www/html/API/SaveHealthData.php 中的 8行中给出
{“error”:“数据不是有效的json格式”}
答案 0 :(得分: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)];
此处 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;
}
快乐编码