【问题标题】:How to post an array of dictionary (json object), in swift using alamofire?如何使用 alamofire 快速发布字典数组(json 对象)?
【发布时间】:2018-07-22 05:46:38
【问题描述】:

我需要如何发布请求:

它在数据库中的样子:

您好,我正在开发一个食品应用程序,我需要将订单详细信息发送到数据库。为此,我创建了一个类似

的数据类型
class orderModel : NSObject {

var menu_name : String = ""

var quantity : Int = 0

var price : Double = 0.0

var menu_id : String = ""

init?(menu_name : String,menu_id : String, price : Double,  quantity : Int) {

    guard !menu_id.isEmpty else{
        return nil
    }

    self.menu_name = menu_name
    self.menu_id = menu_id
    self.price = price
    self.quantity = quantity

  }

}

这个。然后我正在下订单,

 let parameters : Parameters = [
                    "custid" : defaults.object(forKey: "userid")!,
                    "carttotal" : Int(totalPrice),
                    "cartitems" : ordersArray,
                    "deliverytime" : timeSlot,
                    "custaddress" : custAdd!,
                    "areacode" : defaults.object(forKey: "areaCode")!
                ]

    Alamofire.request(orderPlaceURL, method: .post, parameters: parameters).responseJSON { response in

        print((response.result.value)!)

    }
    totalPrice = 0.0
    ordersArray.removeAll()

发布的数据应该看起来像第一张图片,但是当它输入到数据库中时,它会显示为第二张图片。而不是数组元素,只是单词“Array”。谁能建议我该怎么做?

【问题讨论】:

  • 使用JSONSerialization以参数的形式添加你的数组
  • 好吧.. 完全忘记序列化 json 数据了..
  • 谢谢.. 我使用 Codable 从我的建模数据中获取字符串值,然后在 post 参数中传递字符串.. 感谢您的建议..

标签: ios swift3 httprequest alamofire


【解决方案1】:

AlamofileParameters 对象的类型是[String: Any],这不是你想要的。 而是创建一个包含多个字典的数组并将其传递给此函数:

func uploadDataToServer(endPoint: String, dataToUpload: [[String: Any]], completionHandler:@escaping (Bool) -> ()){

    let url = Config.BASE_URL + endPoint

    var request = URLRequest(url: URL.init(string: url)!)
    request.httpMethod = "POST"

    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    let dataToSync = dataToUpload
    request.httpBody = try! JSONSerialization.data(withJSONObject: dataToSync)

    Alamofire.request(request).responseJSON{ (response) in

        print("Success: \(response)")
        switch response.result{
        case .success:
            let statusCode: Int = (response.response?.statusCode)!
            switch statusCode{
            case 200:
                completionHandler(true)
                break
            default:
                completionHandler(false)
                break
            }
            break
        case .failure:
            completionHandler(false)
            break
        }
    }
}

你的数组应该是:

var uploadArray = [[String: Any]]()
let ordersDictionary = [
                    "custid" : defaults.object(forKey: "userid")!,
                    "carttotal" : Int(totalPrice),
                    "cartitems" : ordersArray,
                    "deliverytime" : timeSlot,
                    "custaddress" : custAdd!,
                    "areacode" : defaults.object(forKey: "areaCode")!
                ]

uploadArray.append(ordersDictionary)

然后将uploadArray 传递给上述函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2018-10-06
    • 2023-04-05
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多