В Swift преобразование структуры в JSON — обычная задача при работе с веб-сервисами или при сохранении данных. К счастью, Swift предоставляет несколько методов и API для облегчения этого преобразования. В этой статье мы рассмотрим различные подходы к преобразованию структуры в JSON на примерах кода.
Метод 1: Codable протокол с JSONEncoder
Протокол Codable, представленный в Swift 4, упрощает процесс преобразования между типами Swift и внешними представлениями, такими как JSON. Вот пример:
struct Person: Codable {
let name: String
let age: Int
}
let person = Person(name: "John Doe", age: 30)
do {
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(person)
let jsonString = String(data: jsonData, encoding: .utf8)
print(jsonString ?? "")
} catch {
print("Error encoding struct to JSON: \(error)")
}
Метод 2: ручная сериализация с помощью JSONSerialization
Если ваша структура не соответствует протоколу Codable, вы можете сериализовать ее вручную с помощью класса JSONSerialization. Вот пример:
struct Person {
let name: String
let age: Int
func toJSON() -> [String: Any] {
return ["name": name, "age": age]
}
}
let person = Person(name: "John Doe", age: 30)
do {
let json = try JSONSerialization.data(withJSONObject: person.toJSON(), options: .prettyPrinted)
let jsonString = String(data: json, encoding: .utf8)
print(jsonString ?? "")
} catch {
print("Error converting struct to JSON: \(error)")
}
Метод 3: пользовательское перечисление CodingKeys
Если имена свойств вашей структуры отличаются от имен ключей JSON, вы можете использовать пользовательское перечисление CodingKeysдля указания сопоставления. Вот пример:
struct Person: Codable {
let fullName: String
let yearsOld: Int
enum CodingKeys: String, CodingKey {
case fullName = "name"
case yearsOld = "age"
}
}
let person = Person(fullName: "John Doe", yearsOld: 30)
do {
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(person)
let jsonString = String(data: jsonData, encoding: .utf8)
print(jsonString ?? "")
} catch {
print("Error encoding struct to JSON: \(error)")
}
В этой статье мы рассмотрели различные методы преобразования структуры в JSON в Swift. Протокол Codable с JSONEncoder обеспечивает удобный способ сериализации, а JSONSerialization позволяет сериализовать вручную. Кроме того, использование пользовательского перечисления CodingKeys позволяет сопоставлять свойства структуры с различными ключами JSON. Эти методы дают вам гибкость в обработке преобразований структур в JSON в зависимости от ваших конкретных требований.
Используя эти методы, вы можете легко интегрировать свой код Swift с API-интерфейсами на основе JSON и системами хранения данных.