How to convert a Swift object to a dictionary How to convert a Swift object to a dictionary json json

How to convert a Swift object to a dictionary


I must disagree with @Darko.

In Swift 2,

use protocol oriented programming and the simple reflection offered by Mirror class :

protocol JSONAble {}extension JSONAble {    func toDict() -> [String:Any] {        var dict = [String:Any]()        let otherSelf = Mirror(reflecting: self)        for child in otherSelf.children {            if let key = child.label {                dict[key] = child.value            }        }        return dict    }}

then you can use this protocol with your request class and produce the desired dictionary :

class JsonRequest : JSONAble {    var param1 : String?    // ...}let request = JsonRequest()// set params of the requestlet dict = request.toDict()// use your dict


My solution to this will be something like this:

extension Encodable {    var dict : [String: Any]? {        guard let data = try? JSONEncoder().encode(self) else { return nil }        guard let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [String:Any] else { return nil }        return json    }}

and usage will be something like this:

movies.compactMap { $0.dict }


Swift currently does not support advanced reflection like Java or C# so the answer is: no, there is not an equally easy and automated way with pure Swift.

[Update] Swift 4 has meanwhile the Codable protocol which allows serializing to/from JSON and PLIST.

typealias Codable = Decodable & Encodable