2015-02-05 92 views
0

您好,我对目标C很感兴趣,在此先感谢您的帮助。如何将NSString转换为目标c中的NSDictionary?

- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 

    NSLog(@"Notification Received: %@", userInfo); 
    NSString *NSSMessage = [NSString stringWithFormat:@"%@", userInfo]; 

    NotificationMessageHandler *obj = [[NotificationMessageHandler alloc] init]; 
    [obj handleNotificationMessage: NSSMessage]; // NSSmessage is a string to convert into JSON 

} 

我下面的的NSString在NSSMessage

{ 
    aps =  { 
     alert = "\"Status\":\"Confirm\",\"Location\":\"\",\"Type\":\"Telephone Consultation\",\"Date\":\"2015-01-05\",\"Time\":\"19:03\",\"RescheduleDate\":\"\""; 
     badge = 1; 
     sound = "beep.wav"; 
    }; 
} 

里面handleNotificationMessage,我转换的NSString JSON格式

- (void) handleNotificationMessage : (NSString *) NSSParam 
{ 

    if(NSSParam != nil && NSSParam != Nil) 
    { 

     // Parse the string 
     NSLog(@"NSS Message Param %@", NSSParam); 


     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@" " 
                  withString:@""]; 
     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"\n" 
                   withString:@""]; 


     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"aps=" 
                 withString:@"\"aps\":"]; 
     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"alert=\"" 
                 withString:@"\"alert\":{"]; 
     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"\"\";" 
                 withString:@"\"},"]; 

     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"badge=" 
                 withString:@"\"badge\":"]; 
     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"sound=" 
                 withString:@"\"sound\":"]; 

     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"}}\"" 
                 withString:@"}}"]; 

     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@";" 
                      withString:@","]; 
     NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@",},}" 
                 withString:@"}}"]; 

     NSLog(@"NSS Message Param After Parsing %@", NSSParam); 

      NSData *data = [NSSParam dataUsingEncoding:NSUTF8StringEncoding]; 
     id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; // Here json is null 
} 
} 

解析我有一个JSON如下

{"aps":{"alert":{\"Status\":\"Confirm\",\"Location\":\"\",\"Type\":\"TelephoneConsultation\",\"Date\":\"2015-01-05\",\"Time\":\"20:15\",\"RescheduleDate\":\"\"},"badge":1,"sound":"beep.wav"}} 

我曾经使用以下代码将NSString转换为JSON

NSData *data = [NSSParam dataUsingEncoding:NSUTF8StringEncoding]; 
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; // Here json is null 

这里json对象显示为空,但NSData有对象。 那么,如何将NSString转换为目标c中的NSDictionary? 请帮忙!

+0

1.第一个代码片段不是NSString。 2.你如何“解析”到JSON? 3.你想做什么?请澄清你的问题,这很难理解。 – CaptJak 2015-02-05 14:33:20

+0

我编辑了我的问题 – Sakthimuthiah 2015-02-05 14:55:02

+0

不要将nil传递给错误,它可能包含您需要查看发生了什么的信息。 – Koen 2015-02-05 14:58:38

回答

1

首先,您发送的内容似乎是NSDictionarydescription方法的结果,例如,当你收到一本字典时你会得到什么。这种格式是而不是旨在作为一种传送字典值的方式,但是作为人们阅读的格式。如果你愿意,你应该安排字典以更合适的格式发送,在文档中查找序列化。

如果你不能安排一个更合适的格式,那么你的方法将起作用,尽管它非常不灵活,因为它非常接近于特定消息的内容。你错过的所有东西都是修复逃脱的双引号。如果您添加:

NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"\\\"" 
               withString:@"\""]; 

到您的管道末端,那么它将工作。

HTH

0

试试这个:下面的代码

NSError *error; 
NSString *dictString=[NSString stringWithFormat:@"%@", userInfo];//or ur dict reference.. 
    NSData *jsonData = [dictString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:jsonData 
              options:NSJSONReadingMutableContainers 
              error:&error]; 

//(OR)..Ifü要形成警戒值成dictionary.Use如下

NSString *jsonString = @"{"aps":{"alert":{\"Status\":\"Confirm\",\"Location\":\"\",\"Type\":\"TelephoneConsultation\",\"Date\":\"2015-01-05\",\"Time\":\"19:03\",\"RescheduleDate\":\"\"},"badge" :1,"sound" :"beep.wav"}}"; 
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
+0

尝试以上格式后,jsonString为“{”aps“:{”alert“:{\”Status \“:\”Confirm \“,\”Location \“:\”\“,\”Type \ “TelephoneConsultation \”,\ “日期\”:\ “2015年1月5日\”,\ “时间\”:\ “19:52 \”,\ “RescheduleDate \”:\ “\”}, “徽章” :1,“sound”:“beep.wav”}}“; //但仍然是相同的错误 – Sakthimuthiah 2015-02-05 14:25:41

0

使用

NSString *jsonString = [json objectForKey:@"alert"]; 
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; 
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

希望它可以帮助你...!

2

你在那里做什么?看看这段代码:

- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 

userInfo有什么类型?这是一个NSDictionary。所以你有一个NSDictionary,然后你去一个疯狂的追逐,将NSDictionary转换为一个NSString,以奇怪和奇妙的方式修补该字符串,试图将其转换为JSON,并试图解析JSON以获得一个NSDictionary

你能看出这是多么毫无意义吗?你NSDictionary开始。所有的代码都是毫无意义的。

相关问题