Как обновить JSON в типе значения данных с помощью Swift - PullRequest
0 голосов
/ 06 марта 2019

Представьте, что у меня есть следующий json в Data формате

var data = Data("""
{
    "name": "Steve",
    "age": 30,
    "pets": [
        "dog"
    ]
}
""".utf8)

Как я могу изменить, скажем, первый элемент pets на "cat" с сохранением моей переменной data?

1 Ответ

2 голосов
/ 06 марта 2019

Сначала вам нужно struct в соответствии с Codable, соответствующим вашему json

struct Person: Codable {
    var name: String
    var age: Int
    var pets: [String]
}

, затем вы можете использовать этот универсальный метод, который принимает объект в типе Data, декодирует его и изменяет его так, как выобъявить позже в changeBlock закрытие.Затем он кодирует его обратно

extension Data {
    mutating func update<T: Codable>(changeBlock: (inout T) -> Void) throws {
        var decoded = try JSONDecoder().decode(T.self, from: self)
        changeBlock(&decoded)
        self = try JSONEncoder().encode(decoded)
    }
}

Использование:

do {
    try data.update { (person: inout Person) -> Void in
        person.pets[0] = "cat"
    }
} catch { print(error) }

//print(String(data: data, encoding: .utf8))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...