在 Swift 中将对象转换为 JSON 可以通过以下方法实现:
使用 Codable 协议
Swift 的 Codable 协议(Encodable 和 Decodable 的组合)是处理 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)")
}
}
处理自定义编码逻辑
对于需要自定义编码逻辑的对象,可以手动实现 Encodable 的 encode(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),需要先转换为支持的类型(如Data或String)。
3194

被折叠的 条评论
为什么被折叠?



