【问题标题】:Sending JSON object as a post parameter using Alamofire使用 Alamofire 将 JSON 对象作为 post 参数发送
【发布时间】: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 我将所有内容都用作字符串。

标签: ios json swift alamofire


【解决方案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;
}

【讨论】: