Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串
Posted
技术标签:
【中文标题】Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串【英文标题】:Swift Alamofire can not parse the response JSON string in POST request 【发布时间】:2021-05-25 00:55:42 【问题描述】:一个 POST http 请求:
task.request = sessionManager?.request(url!, method: method, parameters: paramters, encoding: JSONEncoding.prettyPrinted, headers: nil).responseJSON response in
task.handleResponse(response: response)
响应是这样的 JSON 字符串:
\"Data\":\"ArrayOfItems\":[\"ActualQty\":\"5.0\",\"BatchManaged\":true,\"ArrayOfBatches\":[\"BatchNumber\":1,\"Counted\":\"ADD\", \"Quantity\":10,\"BatchNumber\":2,\"Counted\":\"ADD\", \"Quantity\":10],\"LineNum\":\"1\",\"ItemCode\":\"M1001-L\",\"WarehouseCode\":\"Store\"],\"Comments\":\"Ht\",\"DocEntry\":\"1\",\"Quantiry\":\"123\",\"Initials\":\"RT\",\"PromptAnswerValue\":[]
Alamofire 无法解析响应 JSON 字符串。错误不断:
responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "No string key for value in object around character 40." UserInfo=NSDebugDescription=No string key for value in object around character 40.))
调试,'let json = try JSONSerialization.jsonObject(with: validData, options: options)' 行失败。见附件流动:
validData 是有价值的。为什么会这样?
我写了一个演示,我可以接收响应json字符串,代码如下:
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("\(jsonData.length)", forHTTPHeaderField: "Content-Length")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData as Data
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest) (
data, response, error) in
guard let data = data, let _:URLResponse = response, error == nil else
print("error")
return
let dataString = String(data: data, encoding: String.Encoding.utf8)
let dict = self.getDictionaryFromJSONString(jsonString: dataString!)
print(dict)
task.resume()
用过的URLSession可以做到这一点,但是为什么Alamofire不能呢?是我使用的问题吗?请指教。
谢谢。
【问题讨论】:
【参考方案1】:我已经解决的问题。这是由响应中的无效 JSON 字符串引起的。
-
调试如流:
在此处调试并在控制台中执行此操作
po String(data: validData, encoding: String.Encoding.utf8)
-
检查 JSON 字符串是否有效。
此外,请注意:使用 JSONEncoding.prettyPrinted。
【讨论】:
以上是关于Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 4 请求返回 NSArray,无法弄清楚如何在 Swift 3 中使用 SwiftyJSON 进行解析
如何在 Swift 中解析来自 Alamofire API 的 JSON 响应?