使用 Alamofire 将 JSON 对象作为 post 参数发送

Posted

技术标签:

【中文标题】使用 Alamofire 将 JSON 对象作为 post 参数发送【英文标题】:Sending JSON object as a post parameter using Alamofire 【发布时间】:2018-04-14 19:29:22 【问题描述】:

我目前正在开发一个 ios 应用程序,最近我遇到了一个障碍,基本上我尝试使用的 API 端点需要一个 JSON 对象作为这种格式的 POST 参数。


  json: 
    product_report: [
      
        "id_assigned_pos": someid,
        "id_user": someid,
        "number": somenumber,
      ,
      
        "id_assigned_pos": someid,
        "id_user": someid,
        "number": somenumber,
      ,
        "id_assigned_pos": someid,
        "id_user": someid,
        "number": somenumber,
      
    ]
  

我很难弄清楚如何使用 Alamofire 和 swift 4 来实现这一点。 我很感激有人的帮助。 谢谢!

【问题讨论】:

为了更好的解决方案,能否分享一下列表中使用的数据结构? @Kamran 我将所有内容都用作字符串。 【参考方案1】:
let parameters = [
    "json": [
        "product_report": [
            [
                "id_assigned_pos": 1,
                "id_user": 1,
                "number": 1
            ],
            [
                "id_assigned_pos": 1,
                "id_user": 1,
                "number": 1
            ],
            [
                "id_assigned_pos": 1,
                "id_user": 1,
                "number": 1
            ],
        ]
    ]
]


Alamofire.request(url, method:.post, parameters:parameters, headers:headers).responseJSON  response in
    // Here is the response  
 `

【讨论】:

感谢您的快速响应,但我正在尝试使用领域数据库中的数据来实现这一点,我是否必须使用字典来构建参数?! 你应该使用 Codable 协议,它会自动完成。有很多关于codable的教程,google一下就行了。【参考方案2】:

你可以试试这个:

var dict : [String: Any] = [:]

dict["type"] = "Step"
dict["data"] = ["2015-08-02": 8574];

let params: [String: Any] = ["r_id": "someName",
                            "data": String.jsonString(data: dataDict)];

这里的jsonString是String的扩展

static func jsonString(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;

【讨论】:

以上是关于使用 Alamofire 将 JSON 对象作为 post 参数发送的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 将带有 JSON 对象和查询参数的 POST 请求发送到 REST Web 服务

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

使用 Alamofire 请求方法在 POST 的请求正文中发送 JSON 对象数组

Alamofire 不允许直接发送对象

如何将我的类对象转换为 JSON for Alamofire

使用 Alamofire 将 JSON 解码为对象