Как перебрать объект JSON в Vapor 1.5 и преобразовать его в [String: Any]?

Я отправляю запрос на свой сервер steam 1.5 через Alamofire с телом типа [String: Any], где Any type — это словарь String: String.

Когда запрос получен на сервере, я конвертирую его в тип JSON.

 guard let reqJson = request.json else {return}

Как я могу перебрать этот объект JSON и преобразовать его в массив [String:Any]

Тело запроса, которое я отправляю из клиентского приложения, выглядит так:

 ["DHSKL3920JFLSKXFgs": 
   ["title": “some title”, 
    "body": “some body”, 
    "DHSKL3920JFLSKXFgs": "DHSKL3920JFLSKXFgs", 
    "unreadMessagesCount": 3], 

 "PKF993AVG59gkCM": 
   ["title": “some title”, 
    "body": “some body”,  
    "DHSKL39": "DHSKL39", 
     "unreadMessagesCount": 3]] 

person bibscy    schedule 10.08.2018    source источник


Ответы (3)


Вы можете использовать swift4 Codable и сократить свой код до 4-5 строк. Документация

person Pouya Kahfi    schedule 10.08.2018
comment
Я использую Vapor 1.5, Swift 3, я не могу использовать Swift 4, и это должен быть комментарий, а не ответ - person bibscy; 11.08.2018

Если я правильно вас понял. Возможно, поможет следующее.

//This method uses high order function map
func convert(json:[String:Any]) -> [[String: Any]] {
    let requiredObjects = json.map { $0.value as! [String:Any] } //force unwrapping
    return requiredObjects
}

//This method uses simple loop
func convert(json:[String:Any]) -> [[String: Any]] {
    var requiredObjects = [[String:Any]]()
    for (key, value) in json.enumerated() {
        requiredObjects.append([value.key : value.value])
    }
    return requiredObjects
}
person kathayatnk    schedule 11.08.2018

person    schedule
comment
Если у кого-то есть более элегантное решение, пожалуйста, покажите его! - person bibscy; 11.08.2018