Попробуйте что-нибудь подобное. Меня устраивает. Logg (Имя класса)
String level= "";
Properties prop = new Properties();
InputStream in =
Logg.class.getResourceAsStream("resources\\config");
if (in != null) {
prop.load(in);
} else {
throw new FileNotFoundException("property file '" + in + "' not found in the classpath");
}
level = prop.getProperty("Level");
Сначала вам нужно 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))