swift 对象转Json

在 Swift 中将对象转换为 JSON 可以通过以下方法实现:

使用 Codable 协议

Swift 的 Codable 协议(EncodableDecodable 的组合)是处理 JSON 编码和解码的推荐方式。

struct Person: Codable {
    var name: String
    var age: Int
}

let person = Person(name: "John", age: 30)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted

do {
    let jsonData = try encoder.encode(person)
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print(jsonString)
    }
} catch {
    print("Error encoding to JSON: \(error)")
}

使用 JSONSerialization

如果对象是字典或数组,可以直接使用 JSONSerialization

let dictionary: [String: Any] = ["name": "John", "age": 30]
if JSONSerialization.isValidJSONObject(dictionary) {
    do {
        let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: .prettyPrinted)
        if let jsonString = String(data: jsonData, encoding: .utf8) {
            print(jsonString)
        }
    } catch {
        print("Error converting to JSON: \(error)")
    }
}

处理自定义编码逻辑

对于需要自定义编码逻辑的对象,可以手动实现 Encodableencode(to:) 方法:

struct CustomPerson: Encodable {
    var name: String
    var age: Int
    
    enum CodingKeys: String, CodingKey {
        case name = "user_name"
        case age
    }
    
    func encode(to encoder: Encoder) throws {
        var container = encoder.container(keyedBy: CodingKeys.self)
        try container.encode(name, forKey: .name)
        try container.encode(age, forKey: .age)
    }
}

注意事项

  • 确保所有属性都符合 Codable 协议,否则需要手动实现编码逻辑。
  • 使用 JSONEncoder 时,可以通过 outputFormatting 调整输出格式(如 .prettyPrinted)。
  • 如果对象包含非 Codable 类型(如 UIImage),需要先转换为支持的类型(如 DataString)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泓博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值