为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?

Posted

技术标签:

【中文标题】为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?【英文标题】:Why Alamofire 4.4.0 turns JSON string with escaped JSON string (Swift 3)?为什么 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)? 【发布时间】:2017-04-22 14:25:57 【问题描述】:

我在将 JSON 数据转换为字符串时遇到问题。

var url = "http://10.1.10.98/POSSytem/api/inventories/PutInventory?received='id':'coke','price':4.99,'In_stock':2"
print(url)
Alamofire.request(str, method: .post, parameters: [:], encoding: JSONEncoding, headers: nil)
        .response  (res) in
            print(res)

日志: 原始字符串 -> http://10.1.10.98/POSSytem/api/inventories/PutInventory?received='id':'coke','price':4.99,'In_stock':2

DefaultDataResponse(请求:无,响应:无,数据:可选(0 字节),错误: 可选(Alamofire.AFError.invalidURL("http://10.1.10.98/POSSytem/api/inventories/PutInventory?received=\'id\':\'coke\',\'price\':4.99,\'In_stock\':2")), 时间线:时间线:“请求开始时间”:514563518.605,“初始 响应时间”:514563518.597,“请求完成时间”: 514563518.597,“序列化完成时间”:514563518.605,“延迟”:-0.007 秒,“请求持续时间”:-0.007 秒, “序列化持续时间”:0.007 秒,“总持续时间”:0.000 秒, _metrics:无)

由于某种原因,Alamofire 将 url 变成了不同的 url。在 JSON 字符串中添加转义字符。阿拉莫火 4.4.0 它应该保持不变:"http://10.1.10.98/POSSytem/api/inventories/PutInventory?received='id':'coke','price':4.99,'In_stock':2"

【问题讨论】:

【参考方案1】:
guard let js = try? JSONSerialization.data(withJSONObject: dict, options: []) else 
           print("Error parsing json data \(dict)")
            return
        

    let theJSONText = String(data: js,encoding: .ascii)


    url += "\(theJSONText!)"



    let finalURL = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)


    Alamofire.request(finalURL!, method: .post)
        .response  (res) in
            print(res)
    

使用后

添加百分比编码

它为有效的 url 编码了 JSON 字符串,并触发了 post 调用。

【讨论】:

以上是关于为啥 Alamofire 4.4.0 将 JSON 字符串转换为转义的 JSON 字符串(Swift 3)?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作

Xcode 8.3.2 不适用于 Alamofire 4.4.0

为啥我无法从 Alamofire 获取请求结果

为啥即使我使用 Alamofire 发出请求,我的应用程序仍然冻结?

为啥我不能将文件附加为 Alamofire 中的参数值之一?

为啥反序列化 JSON 会给每个值 0