相关文章推荐
长情的风衣  ·  C# 字串轉日期 - iT ...·  1 年前    · 
踏实的登山鞋  ·  django test if model ...·  1 年前    · 

使用Alamofire发送请求时,官方api中Parameters的格式必须为[String: Any],如果想要直接提交json数组格式,应该如何提交呢?

/// A dictionary of parameters to apply to a `URLRequest`.
public typealias Parameters = [String: Any]
open func request(_ convertible: URLConvertible,
                  method: HTTPMethod = .get,
                  parameters: Parameters? = nil,
                  encoding: ParameterEncoding = URLEncoding.default,
                  headers: HTTPHeaders? = nil,
                  interceptor: RequestInterceptor? = nil,
                  requestModifier: RequestModifier? = nil) -> DataRequest {
    let convertible = RequestConvertible(url: convertible,
                                         method: method,
                                         parameters: parameters,
                                         encoding: encoding,
                                         headers: headers,
                                         requestModifier: requestModifier)
    return request(convertible, interceptor: interceptor)

废话不多说,直接上代码:

  1. 对Array扩展,通过特定的key值来记录json数组格式的提交;
  2. ArrayEncoding通过对ParameterEncoding协议的实现,从而将json数组转化为Data格式来提交请求。
import Foundation
import Alamofire
private let arrayParametersKey = "arrayParametersKey"
/// Extenstion that allows an array be sent as a request parameters
extension Array {
    /// Convert the receiver array to a `Parameters` object. 
    func asParameters() -> Parameters {
        return [arrayParametersKey: self]
/// Convert the parameters into a json array, and it is added as the request body. 
/// The array must be sent as parameters using its `asParameters` method.
public struct ArrayEncoding: ParameterEncoding {
    /// The options for writing the parameters as JSON data.
    public let options: JSONSerialization.WritingOptions
    /// Creates a new instance of the encoding using the given options
    /// - parameter options: The options used to encode the json. Default is `[]`
    /// - returns: The new instance
    public init(options: JSONSerialization.WritingOptions = []) {
        self.options = options
    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var urlRequest = try urlRequest.asURLRequest()
        guard let parameters = parameters,
            let array = parameters[arrayParametersKey] else {
                return urlRequest
            let data = try JSONSerialization.data(withJSONObject: array, options: options)
            if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
                urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
            urlRequest.httpBody = data
        } catch {
            throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
        return urlRequest
let values = ["06786984572365", "06644857247565", "06649998782227"]
AF.request(url, 
           method: .post, 
           parameters: values.asParameters(),
           encoding: ArrayEncoding())

来源:https://stackoverflow.com/questions/27026916/sending-json-array-via-alamofire

使用Alamofire发送请求时,官方api中Parameters的格式必须为[String: Any],如果想要直接提交json数组格式,应该如何提交呢?/// A dictionary of parameters to apply to a `URLRequest`.public typealias Parameters = [String: Any]open func request(_ convertible: URLConvertible, met var jsonstr=[{'name':'a','value':1},{'name':'b','value':2}]; var jsonarray = eval('('+jsonstr+')'); var arr = name : $('#names').val(), value : $('#values').val() jsonarray.push(arr); var json={};// 定义一个json
java后台接受ajax传的json数据,json数据又有对象,数组。 所有总结下springmvc获取前端传来的json数据方式: 1、以RequestParam接收 前端传来的是json数据不多时:[id:id],可以直接用@RequestParam来获取值 @Autowired private AccomodationService accomodationService; @RequestMapping(value = "/update") @ResponseBody public String
使用Alamofire实现了JSON数据的获取 首先是导入Alamofire包 前往https://github.com/Alamofire/Alamofire获取最新版本 解压完成后将其中的Alamofire.xcodeproj文件copy到你的工程文件下 然后在工程的General -> Embedded Binaries点击+号 导入iOS用的Alamofire框架 后面改为option
iOS网络请求以JSON格式上传 在网络开发中请求方式都是以POST或者GET的方式来请求数据,在处理参数的时候都是封装在一个字典里面,然后用AFNetworking或者Alamofire框架提交服务器处理的 let param = ["param1": "value1", "param2": "value2"] alamofireNetWorking("url", param: param
// Created by Seasons on 2019/5/17. import Foundation import Alamofire typealias SuccessBlock = ([String:Any]) -> Void 服务端给的接口,需要将参数以application/json格式,作为请求体,以post请求的方式传给服务端。 项目的网络请求框架是封装的Alamofire,业务层只需要构建业务对应的Request和Response即可。业务代码大致如下: class Request: WowRequest<Respone> { var countInfo: Bool = false var page: Int = 0
Alamofire是IOS开发时高效的网络第三方工具库,有时我们需要将本地的一些数据调用API上传到云端,再接收处理完成后的结果,在这个过程中,最终我们需要的信息是以JSON串进行返回的。 下面,我将以一个单词信息查询API为例,演示Alamofire的使用方法。 首先列出该API返回的JSON格式: "word": "cell", "accent": "/sel/", "mean_cn": "n.\u7ec6\u80de\uff1b\u5c0f\u9694\u95f4", 相关文章系列:(文章代码均已升级至Swift3) [当前文章] Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求) Swift - HTTP网络操作库Alamofire使用详解2(文件上传Swift - HTTP网络
Alamofire Tutorial,敬请勘误。 AFNetworking是 iOS 和 OS X 上最受欢迎的第三方库之一。它曾在我们的2012年的读者评选中荣获2012年度最佳 iOS 库称号。它同样也在 Github 上面获得了14000多个 stars 和4000多 let image = UIImage(named: "xxx") //将图片转化为JPEG类型的data 后面的参数是压缩比例 let jpegImage = UIImageJPEGRepresentation(image!, 0.5) //要传的参数(比如我们带用户的加密uid) let u...
目前公司的Swift项目网络请求使用的是第三方开源库Alamofire,在使用的过程中有遇到过2种参数格式无法正确传递到后端的情况; 1)参数包含空数组 直接会被过滤删除掉 2)参数包含二维数组 会把二维数组转换为一维数组 下面将结合Alamofire参数编码部分的源码来一步一步的分析为啥不满足这2种参数格式。 1、首先看下实际结果 这里有必要先说下测试接口使用 httpbin.org来进行测试的好处;因为它在被调用后可以返回服务端所接收到的所有参数;在我们这里仅仅调试参数,所以比使用抓包工具要更方便一些,
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile BetterThanNever: 这个设置的名字是排除某某架构,就是排除armv7表情包 Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile chokshen: 建议你用谷歌翻译一下Excluded Architectures是啥意思 Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile weixin_43035060: 感觉连表达都有问题,首先是将值设为armv7,然后后面就说需要将armv7剔除。。。 Alamofire提交json数组格式的参数 生命不止,奋斗不息: 高手,终于解决拉 Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile 码农晨仔: 改了也没用啊