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

如何使用Alamofire发送自定义OrderModel类对象列表?

如何将自定义OrderModel类转换为指定格式的JSON数据

没问题,我来帮你搞定这个需求!核心是要解决模型属性名和JSON键名的映射问题,同时把模型数组包装在order_model这个顶层键下。下面用Swift原生的Codable协议来实现,这是最简洁且无第三方依赖的方案:

1. 修改OrderModel类,遵循Codable并自定义键映射

首先让你的OrderModel遵循Codable协议,然后通过CodingKeys枚举来指定每个属性对应JSON里的键名,完美匹配你要的格式:

class OrderModel: Codable {
    var mId: String?
    var productCode: String?
    var orderQty: Int?
    var productRate: Int?
    var requiredOn: String?
    var orderAddress: String?
    var remarks: String?
    var productTitle: String? // 注意你原代码里的`productTtitle`是笔误,这里修正为`productTitle`
    var orderAmount: Int?
    var branchId: String?
    
    // 自定义属性与JSON键的映射关系
    enum CodingKeys: String, CodingKey {
        case mId = "m_id"
        case productCode = "Product_code"
        case orderQty = "Order_qty"
        case productRate = "Product_rate"
        case orderAmount = "Order_amount"
        case requiredOn = "Required_on"
        case branchId = "branch_id"
        case orderAddress = "Order_Address"
        case remarks = "Remarks"
        // 如果后端不需要`productTitle`字段,这里可以不用添加,序列化时会自动忽略
    }
}

2. 创建包装类,匹配顶层JSON结构

因为你要的JSON外层是order_model键,对应一个模型数组,所以我们需要一个包装结构体来对应这个顶层结构:

struct OrderRequest: Codable {
    let order_model: [OrderModel]
}

3. 序列化模型为JSON数据

接下来创建模型实例,包装成OrderRequest,再通过JSONEncoder转成JSON数据(或字符串):

// 构建第一个订单实例
let order1 = OrderModel()
order1.mId = "121212"
order1.productCode = "000001"
order1.orderQty = 2
order1.productRate = 100
order1.orderAmount = 200
order1.requiredOn = "2018-02-01T12:32:33.8550337+05:00"
order1.branchId = "1701001"
order1.orderAddress = "address"
order1.remarks = "rem"

// 构建第二个订单实例
let order2 = OrderModel()
order2.mId = "12234334"
order2.productCode = "000002"
order2.orderQty = 1
order2.productRate = 100
order2.orderAmount = 100
order2.requiredOn = "2018-02-01T12:32:33.8550337+05:00"
order2.branchId = "1701001"
order2.orderAddress = "address"
order2.remarks = "rem"

// 包装成顶层请求结构
let orderRequest = OrderRequest(order_model: [order1, order2])

// 序列化转JSON数据
do {
    let jsonData = try JSONEncoder().encode(orderRequest)
    // 可选:转成字符串查看结果
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print(jsonString)
    }
    // 之后就可以把jsonData通过网络请求发送给后端了
} catch {
    print("JSON编码失败:\(error.localizedDescription)")
}

额外提示

  • 如果你的requiredOn字段是Date类型而非String,可以给JSONEncoder设置日期编码策略来匹配后端格式:
    let encoder = JSONEncoder()
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"
    encoder.dateEncodingStrategy = .formatted(dateFormatter)
    let jsonData = try encoder.encode(orderRequest)
    
  • 如果你习惯用第三方库(比如Alamofire、ObjectMapper),也可以用类似的属性映射方式实现,但Codable是Swift原生支持的,无需额外引入依赖,更推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:22:55