如何把NSString转换成NSDictionary



你好,我是iOS新手,所以请帮助我。

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
        NSLog(@"%@",userInfo);
        NSString * string=[[NSString alloc]initWithFormat:@"%@",[segueDictionary valueForKey:@"vendor_data"]];}

输出为

{
    aps =     {
        alert = "Get Upto 50% Off ";
        sound = default;
        "vendor_data" =         {
            cat = "Baby & kids";
            "closing_hours" = "09:00 PM";
            latitude = "28.57089323";
            longitude = "77.32666539";
            "offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
            "offer_id" = 1128;
            "offer_in_percentage" = "Get Upto 50% Off ";
            "offer_item_name" = Lilliput;
            "offer_valid_upto" = "2015-10-30";
            "opening_hours" = "10:00 AM";
            "phone_no" = "*********";
            pincode = 0;
            rating = 0;
            "sub_category" = "Clothing,Footwear";
            title = "Offer Of The Day";
            "vendor_address" = "***********";
            "vendor_id" = "lliputkids.com";
            "vendor_location" = "*****";
            "vendor_name" = Lilliput;
            "vendor_type" = shop;
        };
    };
}

来自推送通知数据

NSString * string = {
cat = "Baby & kids";
"closing_hours" = "09:00 PM";
latitude = "28.57089323";
longitude = "77.32666539";
"offer_desc" = "Get Upto 50% Off On All Kids Clothing.";
"offer_id" = 1128;
"offer_in_percentage" = "Get Upto 50% Off ";
"offer_item_name" = Lilliput;
"offer_valid_upto" = "2015-10-30";
"opening_hours" = "10:00 AM";
"phone_no" = "********";
pincode = 0;
rating = 0;
"sub_category" = "Clothing,Footwear";
title = "Offer Of The Day";
"vendor_address" = "shop.no- 6, sun market";
"vendor_id" = "illiputkids.com";
"vendor_location" = "*******";
"vendor_name" = Lilliput;
"vendor_type" = shop;}

这个数据是字符串格式,但我想在字典格式我得到的数据在字符串格式。所以请帮帮我提前感谢

请核对一下。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSDictionary *segueDictionary = [userInfo valueForKey:@"aps"];
    NSLog(@"%@",userInfo);
    NSDictionary *vendorDic = [segueDictionary valueForKey:@"vendor_data"];
    NSString *vedorAddress = [vendorDic valueForKey:@"vendor_address"];
}

注:{key:value,key:value}中的为字典格式。但是value本身可能是一个字典。即{关键关键:{键:值}:{键:值,键:值}}

我相信你误解了JSON格式。

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

现在如果你执行以下NSLog语句

NSLog(@"%@",[json objectForKey:@"sub_category"]);

它会给你:-服装,鞋类

didReceivePushNotificationuserInfo参数返回一个NSDictionary对象。

可以直接使用

获取vendor_data字典。
NSDictionary *vendorDataDictionary = [[userInfo objectForKey:@"aps"] objectForKey:@"vendor_data"];

或带下标

NSDictionary *vendorDataDictionary = userInfo[@"aps"][@"vendor_data"];

方法valueForKey:是一个特殊的KVC方法。获取键对象的标准方法是objectForKey:

当您发送远程通知时,其有效负载是JSON格式的。大致解释一下,它就是把所有对象放在字典里;数组,这样你就可以在有效负载中拥有一个清晰的对象层次结构。

你现在所做的只是把JSON放到一个字符串中,而不是有单独的对象(数组和包含对象的字典),你有一个包含所有对象的长字符串。

您需要执行以下操作

  • 确保在通知有效负载中发送有效的格式化JSON。我不知道你是怎么发送的,所以我帮不了你。

  • 一旦你收到推送,你有一个userInfo字典,你可以使用:objectForKey导航。这是你的JSON,已经转换为Objective-C对象。

你应该在字典中看到完整的结构。对象和键,具有适当的层次结构。

如果你在aps键或其他自定义键中看到一个字符串,那么你发送的数据是错误的

但是如果你有

  • aps
      <
    • 警告/gh>消息
    • 声音
  • YourCustomKey
    • 一个自定义对象
      • 另一个自定义子对象
    • 等。

在你的userInfo中有了这种结构,那就意味着你可以走了。在通知处理的第一行很容易找到断点,并查看userInfo中的内容。

然后查看里面的内容并手动获取它,但如果你自己创建了通知有效负载(你可能已经这样做了),那么你应该知道哪些数组/字典包含哪些对象,然后手动获取它。

//I'm just giving EXAMPLES : 
NSDictionary *corePayload = [userInfo objectForKey:@"aps"];
NSDictinoary *firstLevel = [userInfo objectForKey:@"vendor_data"];
float latitude = [[firstLevel objectForKey:@"latitude"]floatValue];

像这样,你可以获取任何东西和其他东西

请注意,从您显示的内容来看,您的内容没有正确格式化,您的一些键有"而一些没有,这是不正常的。所以我建议你去看看你要发送的东西,并仔细按照我的步骤来做。如果你的第一步不正确,不要进入下一步;)

希望你能找到你想要的!

最新更新