swift - Alamofire 的格式化字典

标签 swift dictionary swift3 alamofire

这个问题更多的是关于 Swift & 和字典而不是 Alamofire 本身

我需要通过网络服务创建记录,我使用的是 Alamofire。出于某种原因,我的报价比预期的要多,网络服务拒绝了我的电话

如果我通过 curl 模拟调用,web 服务接收:

{"records"=>[{"id"=>"2", "node"=>{"children"=>[{"specifications"=>"Specs", "description"=>"Fee", "line_item"=>{"sale_price"=>123.4, 
"amount"=>1, "vat_percentage"=>21, "unit_price"=>99.5}}]}}], "action"=>"create", "collection"=>"invoices", "controller"=>"api/v2/api"}

如果我在我的应用程序中通过 Alamofire 进行调用,网络服务会收到:

{"records"=>[{"id"=>"2", "node"=>{"children"=>[{"specifications"=>"Specs", "description"=>"Fee", "line_item"=>{"sale_price"=>"123.4", 
"amount"=>"1", "vat_percentage"=>"21", "unit_price"=>"99.5"}}]}}], "action"=>"create", "collection"=>"invoices", "controller"=>"api/v2/api"}

如您所见,每个数字都用引号括起来(例如,“99.5”与 99.5,导致网络服务翻转。

我调整了一下,但找不到如何在 Swift 中解决这个问题。我为 Alamofire 创建负载的方式是:

let jsonObject: [String: AnyObject] = [
            "id": id as AnyObject,
            "node" : [
                "children": [[
                    "description" : lineDescription,
                    "specifications" : lineSpecifications,
                    "line_item" : [
                        "amount" : 1,
                        "unit_price" : feePrice,
                        "sale_price" : feePrice,
                        "vat_percentage" : 21

                    ]
                ]] as AnyObject
            ] as AnyObject
        ]
let parameters = ["records" : [jsonObject as AnyObject]]    

Alamofire.request(urlPath, method: .post, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {

            response in switch (response.result) {

blah blah
}

其中变量 lineDescription 和 lineSpecifications 是字符串,feePrice 是 Double

最佳答案

如评论中所述,我需要为请求添加编码。要关闭问题并显示格式更友好的解决方案,请使用此答案:

Alamofire.request(urlPath, method: .post, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {

应该是:

Alamofire.request(urlPath, method: .post, parameters: parameters,  encoding: JSONEncoding.default, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {

关于swift - Alamofire 的格式化字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489642/

相关文章:

arrays - 如何将协议(protocol)模型设置为多种已知类型字符串/对象?

ios - 无法使用 cocoapods 安装 RealmSwift

ios - 即使我们在 Xcode 中有很多 View 和其他设计,xib 也会显示空白框

ios - 当它是一个单独的 Swift 文件时,从 TableViewDataSource 中删除或添加单元格

ios - CGContextSetLineDash不可用

arrays - 将带有值数组的字典快速映射到另一个带有值数组的字典?

python - 创建一个单词字典,作为映射到一组 'documents' 中的实例的键

ios - 点击 XIB 文件内的 UIButton 时如何执行 segue

excel - 如何访问嵌套字典的键?

Swift3:将字符串转换为以空字符结尾的 C 字符串的正确方法