2015-10-06 116 views
0

您好,我是新来的iOS所以请帮助我..如何将NSString转换为NSDictionary?

- (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;} 

这个数据是字符串格式但我想以字典格式 我正在获取字符串格式的数据。 所以请帮助我 在此先感谢

+0

从哪里api你得到这个?请提供。可能是你缺少的东西 – Jamil

+0

感谢您的帮助。编辑问题请参阅 –

+1

请给予NSLog(@“%@”,userInfo)。 – Jamil

回答

1

请检查与此。

-(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"]; 
} 

注:在{键:值,键:值}是字典formate.but值本身可以是字典。即{key:{key:value},key:{key:value,key:value}}

+0

因为我确信“vendor_data”返回字典 – Jamil

+0

非常感谢你.. –

+0

但如何显示数据.. –

1

我相信你误解了JSON格式。

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

现在,如果你下面的NSLog声明

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

它会给你: - 服装,鞋类

+0

不,它不会与给出的数据。 –

+0

感谢您的帮助。它是得到null –

1

didReceivePushNotificationuserInfo参数返回一个NSDictionary对象。

你可以得到vendor_data字典直接与

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

或下标

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

方法valueForKey:是一种特殊的KVC方法。获得钥匙对象的标准方法是objectForKey:

+0

感谢您的帮助..这是正确的 –

1

发送远程通知时,其有效内容将以JSON格式化。粗略地说,这只是将所有的对象放在字典&数组中,以便您可以在负载中拥有明确的对象层次结构。

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

你需要做以下

  • 确保您在通知有效载荷发送一个有效的格式化JSON。我不知道你是如何发送的,所以我不能真正帮你。

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

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

如果您在aps键或其他自定义键看到一个单一的字符串,然后你要发送的数据错误

但如果你有

  • APS
    • 警报
    • 消息
    • 声音
  • 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]; 

和类似的,你可以获取任何东西和其他一切。

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

希望你能找到你要找的东西!

+0

感谢您的帮助..它工作正常 –

+0

好!你可以将答案标记为正确的:)然后在答案的分数下点击大五。 –

+0

但我现在想要一件事?为什么会投票?有什么问题? –