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

如何使用Alamofire将JSON数据以form-data格式上传到服务端

Alamofire发送form-data格式JSON数据实现方案
  • 先将待发送的JSON结构序列化为Data类型,推荐使用Swift内置的Codable协议实现,也可以用JSONSerialization做转换
  • 调用Alamofire的upload接口构造multipart form-data请求,把序列化后的JSON数据作为表单字段添加到请求体中
  • 监听请求回调,处理成功/失败响应

完整代码示例

首先定义数据模型遵循Codable协议,方便做JSON序列化:

// 子动作模型
struct RemoteAction: Codable {
    let vActionName: String
    let vActionCode: String
    let RemoteStatus: Int
}

// 设备数据根模型
struct DeviceItem: Codable {
    let DeviceID: String
    let RemoteID: String
    let vBrandName: String
    let vModelName: String
    let vRemoteType: String
    let RemoteAction: [RemoteAction]
}

构造数据源并序列化为JSON数据:

// 构造符合要求的数据源
let actionList = [
    RemoteAction(vActionName: "CH+", vActionCode: "123", RemoteStatus: 0),
    RemoteAction(vActionName: "CH-", vActionCode: "12345", RemoteStatus: 0),
    RemoteAction(vActionName: "CH-0", vActionCode: "123456", RemoteStatus: 0)
]
let postData = [
    DeviceItem(DeviceID: "Demo", RemoteID: "123", vBrandName: "VU", vModelName: "VU1", vRemoteType: "TV", RemoteAction: actionList)
]

// 序列化为JSON Data
guard let jsonData = try? JSONEncoder().encode(postData) else {
    print("JSON序列化失败,请检查数据结构")
    return
}

发起form-data请求:

// 替换为实际的服务端接口地址
let serverURL = "替换为你的服务端接口地址"
// 替换为后端约定的form-data字段名,常见字段名有data、jsonParam等
let formField = "后端约定的字段名"

AF.upload(multipartFormData: { formData in
    // 添加JSON数据到表单,如需指定文件名和MIME类型可以用以下写法
    formData.append(jsonData, withName: formField, fileName: "remoteData.json", mimeType: "application/json")
    // 如不需要文件名,仅作为普通字符串字段上传,使用以下写法即可
    // formData.append(jsonData, withName: formField)
    
    // 如有其他表单字段需要添加,可在此处追加
    // formData.append("testValue".data(using: .utf8)!, withName: "otherField")
}, to: serverURL)
.responseData { response in
    switch response.result {
    case .success(let resData):
        // 处理请求成功逻辑
        if let resStr = String(data: resData, encoding: .utf8) {
            print("请求成功,返回内容:\(resStr)")
        }
    case .failure(let error):
        // 处理请求失败逻辑
        print("请求失败:\(error.localizedDescription)")
    }
}

特殊说明:如果你的项目中没有使用Codable,也可以通过JSONSerialization将字典数组转换为JSON数据,代码如下:

let postDictArray: [[String: Any]] = [
    [
        "DeviceID": "Demo",
        "RemoteID": "123",
        "vBrandName": "VU",
        "vModelName": "VU1",
        "vRemoteType": "TV",
        "RemoteAction": [
            ["vActionName": "CH+", "vActionCode": "123", "RemoteStatus": 0],
            ["vActionName": "CH-", "vActionCode": "12345", "RemoteStatus": 0],
            ["vActionName": "CH-0", "vActionCode": "123456", "RemoteStatus": 0]
        ]
    ]
]
guard let jsonData = try? JSONSerialization.data(withJSONObject: postDictArray) else {
    print("JSON序列化失败")
    return
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:27:02