Получение массива json из словарей - PullRequest
0 голосов
/ 20 июня 2020

У меня есть 4 словаря с разными именами, указанными ниже ...

let dict = [
    "ResolutionID": [1: "101", 2: "102", 3: "103", 0: "100"],
    
    "Planned":   [3: "Y", 1: "Y", 2: "Y"],
    
    "Done":  [2: "Y"],
    
    "Who": [2: "qw", 0: "bcc"]
]

Имена этих словарей соответствуют именам ключей моего объекта json и ключей в приведенных выше словарях ( 0,1,2 et c.) Соответствуют общему количеству json объектов в моем массиве. Итак, в приведенном выше случае, поскольку максимальный ключ среди словарей равен 3, у меня будет 4 объекта в моем json массиве (0-3)

Итак, я хотел создать массив json, который, наконец, выглядит так ...

[
  {
    "ResolutionID":100,
    "Who":"bcc",
    "Planned":"",
    "Done":""
  },
  {
    "ResolutionID":101,
    "Who":"",
    "Planned":"Y",
    "Done":""
  },
  {
    "ResolutionID":102,
    "Who":"qw",
    "Planned":"Y",
    "Done":"Y"
  },
  {
    "ResolutionID":103,
    "Who":"",
    "Planned":"Y",
    "Done":""
  }
]

Пробовал использовать merge и merging. Но это не сработало ...

Теперь я не уверен, как добиться такого результата ...

РЕДАКТИРОВАТЬ: Это то, что я пробовал ..

Я пробовал использовать for-l oop для сравнения тех же ключей и затем добавлять их в массив. Но он присваивает неправильные значения. Вот что я пробовал ...

for (indexSel,plantCode) in selectionOptionDic {
    resolutionDict["ResolutionID"] = plantCode
    for (indexPL,planned) in selectionPlannedDic {
        if indexPL == indexSel {
            resolutionDict["Planned"] = planned
        }
        for (indexDone,done) in selectionDoneDic {
            if indexDone == indexPL {
                resolutionDict["Done"] = done
            }
            for (indexWho,text) in selectionWhoDic {
                if indexWho == indexDone {
                    resolutionDict["Who"] = text
                }
                
            }
        }
        arrayOfResolutions.append(resolutionDict)
    }
}

1 Ответ

0 голосов
/ 20 июня 2020

Если вашей конечной целью является массив json, я думаю, что лучше работать со структурой, которая реализует Codable

struct Resolution: Codable {
    let resolutionId: String
    let planned: String
    let done: String
    let who: String

    init(id: String, planned: String?, done: String?, who: String?) {
        self.resolutionId = id
        self.planned = planned ?? ""
        self.done = done ?? ""
        self.who = who ?? ""
    }

    enum CodingKeys: String, CodingKey {
        case resolutionId = "ResolutionID"
        case planned = "Planned"
        case done = "Done"
        case who = "Who"
    }
}

, а затем выполнить преобразование следующим образом

let arrayOfResolutions = selectionOptionDic.map { 
    Resolution(id: $0.value,
               planned: selectionPlannedDic[$0.key],
               done: selectionDoneDic[$0.key],
               who: selectionWhoDic[$0.key])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...