在 Swift 中將對象轉換為 JSON 可以通過以下方法實現:
使用 Codable
協議
Swift 的 Codable
協議(Encodable
和 Decodable
的組合)是處理 JSON 編碼和解碼的推薦方式。
struct Person: Codable {var name: Stringvar age: Int
}let person = Person(name: "John", age: 30)
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinteddo {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: Stringvar age: Intenum 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
)。