Issue #865
We can define some typealias and build extensions on JSONDictionary to easily extract values
typealias JSONDictionary = [String: Any]
typealias JSONArray = [JSONDictionary]
extension JSONDictionary {
    func dict(_ key: String) -> JSONDictionary? {
        self[key] as? JSONDictionary
    }
    func array(_ key: String) -> JSONArray? {
        self[key] as? JSONArray
    }
    func value<T>(_ key: String, as: T.Type) -> T? {
        self[key] as? T
    }
}
let responseJson = try JSONSerialization.jsonObject(with: data, options: [])
guard
    let responseJson = responseJson as? JSONDictionary,
    let uiAmount = responseJson
        .dict("result")?
        .array("value")?
        .first?
        .dict("account")?
        .dict("data")?
        .dict("parsed")?
        .dict("info")?
        .dict("tokenAmount")?
        .value("uiAmount", as: Double.self)
else { return 0 }
Start the conversation