【问题标题】:Swift Alamofire can not parse the response JSON string in POST requestSwift Alamofire 无法解析 POST 请求中的响应 JSON 字符串
【发布时间】:2023-03-17 10:18:02
【问题描述】:

一个 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不能呢?是我使用的问题吗?请指教。

谢谢。

【问题讨论】:

    标签: swift alamofire


    【解决方案1】:

    我已经解决的问题。这是由响应中的无效 JSON 字符串引起的。

    1. 调试如流:

    在此处调试并在控制台中执行此操作

    po String(data: validData, encoding: String.Encoding.utf8)
    
    1. 检查 JSON 字符串是否有效。

    此外,请注意:使用 JSONEncoding.prettyPrinted。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-22
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多