【问题标题】:How to send multiple JSON objects as a stream using alamofire如何使用 alamofire 将多个 JSON 对象作为流发送
【发布时间】:2018-07-07 19:11:48
【问题描述】:

我想在单个请求中发送多个不同的 JSON 对象,我觉得在单个请求中像文件一样流式传输多个 JSON 对象会更好,所以请告诉我是否可能,如果可以,请给我一个关于如何使用 Alamofire 进行操作的想法,下面是我要发布的原始正文(应用程序/json)数据的格式

{"a":23214,"b":54674,"c":"aa12234","d":4634}
{"a":32214,"b":324674,"c":"as344234","d":23434}
{"a":567214,"b":89674,"c":"sdf54234","d"34634}

我尝试了下面的代码,但它没有工作,因为 body 参数的格式不正确,这就是我想尝试在单个请求中将多个 JSON 对象作为流发送的原因,请建议

let SendParams = [
      ["a":1234, "b":2345, "c":3456], ["a":2345, "b":3456, "c":4567], ["a":3456, "b":4567, "c":5678]
    ]
_ = Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding, headers: header)

【问题讨论】:

  • 他使用的格式在* json 对象上有一个键,在这里它没有键。这就是我被卡住的原因。
  • @ThooyavanManivaasakar 因为 JSON 对象是用 key,value paris 构造的,所以你必须有一个 key 才能传递值。
  • 我已经改变了我的问题,因为这是我想问的,但在我的路上感到困惑,请尝试检查并帮助我。
  • 签出THIS

标签: json xcode alamofire swift4


【解决方案1】:

JSON 格式不适合您的请求,JSON 始终是键值对,其中 key 始终为 String,value 为任意 Object。在您的示例中,需要为 Array 类型的对象在顶层设置键,如下所示:

let SendParams = [
                    "key" :[["a":1234, "b":2345, "c":3456], ["a":2345, "b":3456, "c":4567], ["a":3456, "b":4567, "c":5678]]
                ]
_ = Alamofire.request(url, method: .post, parameters: SendParams, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in}

序列化数组并设置为httpBodyhttpBody 对象:

    let url = YOUR_POST_API_URL
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")

    let values = [
        ["a":1234, "b":2345, "c":3456], ["a":2345, "b":3456, "c":4567], ["a":3456, "b":4567, "c":5678]
    ]
    request.httpBody = try! JSONSerialization.data(withJSONObject: values)

    Alamofire.request(request)
        .responseJSON { response in
            // do whatever you want here
            switch response.result {
            case .failure(let error):
                print(error)

                if let data = response.data, let responseString = String(data: data, encoding: .utf8) {
                    print(responseString)
                }
            case .success(let responseObject):
                print(responseObject)
            }
    }

【讨论】:

  • 嗨,我需要将它作为多个 JSON 对象发送,而不是作为嵌套 JSON 对象发送。所以请帮助我在 Alamofire 请求的正文中发送多个 JSON 对象或作为多个 JSON 对象的流。
  • @ThooyavanManivaasakar 检查带有数组的 jsonserialization body 请求的更新答案。
  • 您好,感谢您尝试使用它并更新您的结果。谢谢。
最近更新 更多