Сначала я проанализировал JSON с этой функцией и структурой:
func loadJson{
guard let documentsDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else {return}
let fileUrl = documentsDirectoryUrl.appendingPathComponent("Persons.json")
do{
let data = try Data(contentsOf: fileUrl)
let jsonDecoder = JSONDecoder()
let res = try jsonDecoder.decode(Root.self, from: data)
for (id,item) in res.fields {
self.all.append(Item(id:id,timestampValue:item.timestampValue))}
print(res)
} catch{
print(error)
}
}
struct Root: Codable
{
let fields: [String: Field]
let createTime, updateTime: String
struct Field: Codable
{
let timestampValue: String
}
struct Item {
let id,timestampValue: String
}
Я добавил данные из средства выбора в разобранный массив: все. И я получаю этот вывод из массива:
App.Item(id: "John Doe", timestampValue: "30-03-2020"), App.Item(id: "Erik Martin", timestampValue: "2020-03-30"), App.Item(id: "Michael Lindros", timestampValue: "2020-03-30"), App.Item(id: "Henry Cup", timestampValue: "2020-03-30"), App.Item(id: "Oliver John", timestampValue: "2020-03-30")]
Мне нужно сохранить JSON обратно в следующем формате: каждый идентификатор имени пользователя и значение метки времени различны, и массив может быть с одним или 100 идентификаторами имени пользователя
{
"fields": {
"John Doe": {
"timestampValue": "2020-02-04"
},
"Erik Martin ": {
"timestampValue": "2020-02-05"
}},
"createTime": "2020-02-04",
"updateTime": "2020-02-04"
}
Я пробую несколько стопок, руководства Google с json, но без правильного вывода. Большое спасибо за любые предложения. Мой единственный тест от milion:
func saveToJsonFile() {
guard let documentDirectoryUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
let fileUrl = documentDirectoryUrl.appendingPathComponent("Persons.json")
var paramCollection = [Any]()
var dataCollection = [Any]()
var index = 0
var dictX = [String:Any]()
for (data) in dict {
dictX = [componentArrayId[index]:["timestampValue":listTs[index]]]
dataCollection.append(dictX)
index += 1
}
paramCollection.append(dataCollection)
let finalParameter = ["fields":paramCollection]
do {
let data = try JSONSerialization.data(withJSONObject: finalParameter , options: [])
try data.write(to: fileUrl, options: [])
} catch {
print(error)
}
print("DATA UPLOADED")
}}