Сохранить JSON файл с другим идентификатором Swift - PullRequest
1 голос
/ 30 марта 2020

Сначала я проанализировал 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")

            }}

...