2015-02-05 65 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開始。所有的代碼都是毫無意義的。

相關問題