Search code examples
iosjsonswift2google-cloud-messaginganyobject

Ios Swift decode json data sent from GCM notification


I am receiving the GCM Json encoded data as AnyObject as below

[MsgKey: {"NamKey":"Bdy","MobKey":"9964120147","UidKey":"Uid31"}, collapse_key: do_not_collapse, from: 925652137353]

I want to decode the above and pass it to local notication screen

I tried below :

func application(appPsgVar: UIApplication,
                 didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
{
    print("Notification: ",userInfo["MsgKey"]!)

    let MsgVar = userInfo["MsgKey"]

    var GotVar = MsgVar?.objectAtIndex(2)
|Or|
    var GotVar = MsgVar?.objectForKey("UidKey")
|Or|
    var GotVar = MsgVar?.valueForKey("UidKey")

and

    if let MsgVar = userInfo["MsgKey"] as? [String:AnyObject]
    {
        GetNfnFnc(MsgVar["NamKey"] as! String)
    }

and

    if let MsgVar = userInfo["MsgKey"] as? NSData
    {
        var JsnAryVar: AnyObject!
        do
        {
            JsnAryVar = try NSJSONSerialization.JSONObjectWithData(MsgVar, options: [])
            print(JsnAryVar)
        }
        catch
        {
            print("ErrVar")
        }

        GetNfnFnc(JsnAryVar["NamKey"] as! String)
    }
}

userInfo["MsgKey"] gives me below data and not able understand how to decode further

{"NamKey":"Bdy","MobKey":"9964120147","UidKey":"Uid31"}

Solution

  • Actu the problem was Json encoded data from server was coming as String

    Method 1: Suggested by Eric D giving the solution link Retrieving values from 2D array in JSON string

    do
    {
        if let MsgCodVar = MsgSrgVar.dataUsingEncoding(NSUTF8StringEncoding),
         let MsgJsnVar = try! NSJSONSerialization.JSONObjectWithData(MsgCodVar, options: []) as? [String:AnyObject]
        {
            print(MsgJsnVar)
        }
    }
    

    Method 2 : My own hard workaround :-(

    Create own function to convert String data to array[String:AnyObject]

    func CnvJsnSrgTooAryFnc(JsnSrgPsgVar: String) -> [String:AnyObject]
    {
        var JsnSrgVar = JsnSrgPsgVar
        JsnSrgVar = JsnSrgVar.stringByReplacingOccurrencesOfString("\"", withString: "")
        JsnSrgVar = JsnSrgVar.stringByReplacingOccurrencesOfString("{", withString: "")
        JsnSrgVar = JsnSrgVar.stringByReplacingOccurrencesOfString("}", withString: "")
        let SrgAryVar = JsnSrgVar.componentsSeparatedByString(",")
    
        var JsnAryVar = [String:AnyObject]()
        for SrgIdxVar in SrgAryVar
        {
            let SrgIdxAryVar = SrgIdxVar.componentsSeparatedByString(":")
            JsnAryVar[SrgIdxAryVar[0]] = SrgIdxAryVar[1]
        }
        return JsnAryVar
    }
    
    let MsgAryVar = CnvJsnSrgTooAryFnc(MsgSrgVar)
    
    MsgAryVar["UidKey"]
    

    Got output :

    print(MsgSrgVar) :
    {"NamKey":"Bdy","MobKey":"9964120147","UidKey":"Uid99"}
    
    print(MsgAryVar)
    ["NamKey": Bdy, "MobKey": 9964120147, "UidKey": Uid99]