You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alamofire如何发送无外层键的JSON对象数组请求

解决方案

方案一(推荐,适用于Alamofire 5及以上版本)

Alamofire 5及以上版本原生支持直接传入Encodable类型作为请求参数,无需转换为[String: Any]类型字典,不会自动添加外层键:

struct Something: Codable {
  var thing: String? = nil
}

// 构造参数数组
let params = [Something(thing: "")]

// 发起请求,使用JSONParameterEncoder而非JSONEncoding
AF.request(
    path,
    method: .put,
    parameters: params,
    encoder: JSONParameterEncoder.default,
    headers: headers
).response { response in
    // 处理响应逻辑
}

最终生成的请求体就是你需要的纯对象数组结构:

[
  {
    "thing": ""
  }
]

方案二(兼容低版本Alamofire)

如果使用的是不支持Encodable参数的旧版本Alamofire,可以手动编码数组为JSON Data后设置到请求体:

do {
    let params = [Something(thing: "")]
    // 整体编码数组为JSON Data
    let jsonData = try JSONEncoder().encode(params)
    
    var request = URLRequest(url: URL(string: path)!)
    request.httpMethod = HTTPMethod.put.rawValue
    request.allHTTPHeaderFields = headers.dictionary
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = jsonData
    
    // 发起请求
    AF.request(request).response { response in
        // 处理响应逻辑
    }
} catch {
    print("参数编码失败: \(error.localizedDescription)")
}

原方案失效原因说明

之前查到的方案多为手动将单个模型转为JSON字符串后拼接数组,没有做整体的JSON序列化,因此会得到字符串数组而非对象数组。


内容的提问来源于stack exchange,提问作者DevinM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:06:02