如何在目标 c 中将 NSString 转换为 NSDictionary?
Posted
技术标签:
【中文标题】如何在目标 c 中将 NSString 转换为 NSDictionary?【英文标题】:How to convert NSString to NSDictionary in objective c? 【发布时间】:2015-02-05 13:44:34 【问题描述】:您好,我是 Objective C 的新手,在此先感谢您的帮助。
- (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
我在 NSSMessage 中作为 NSString 关注
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 对象显示为 null 但 NSData 有对象。 那么, 请帮忙!
【问题讨论】:
1.第一个代码 sn-p 不是 NSString。 2. 你是如何“解析”为 JSON 的? 3. 你想做什么?请澄清您的问题,这很难理解。 我已经编辑了我的问题 不要将 nil 传递给错误,它可能包含您需要查看发生了什么的信息。 【参考方案1】:使用下面的代码
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)..如果你想将警报值形成字典。使用如下
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开始。所有这些代码都是毫无意义的。
【讨论】:
【参考方案3】:首先,您被发送的内容似乎是NSDictionary
的description
方法的结果,例如当你NSLog
一本字典时,你会得到什么。这种格式不是旨在作为一种传输字典值的方式,而是作为一种供人们阅读的格式。如果可以的话,您应该安排以更合适的格式发送字典,请在文档中查找序列化。
如果您无法安排更合适的格式,那么您的方法将奏效,尽管它相当不灵活,因为它与特定消息的内容非常紧密地联系在一起。您所错过的只是修复转义的双引号。如果添加:
NSSParam = [NSSParam stringByReplacingOccurrencesOfString:@"\\\""
withString:@"\""];
到你的管道结束,然后它就会工作。
HTH
【讨论】:
【参考方案4】:试试这个:
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];
【讨论】:
尝试上述格式后,jsonString为""aps":"alert":\"Status\":\"Confirm\",\"Location\":\"\", \"Type\":\"TelephoneConsultation\",\"Date\":\"2015-01-05\",\"Time\":\"19:52\",\"RescheduleDate\":\" \","徽章" :1,"声音" :"beep.wav""; // 但还是一样的错误以上是关于如何在目标 c 中将 NSString 转换为 NSDictionary?的主要内容,如果未能解决你的问题,请参考以下文章
如何在iOS中将字符串转换为xml? (目标 C,xcode 7.2)
在 CoreData 实体中将属性从 NSNumber 转换为 NSString - LightWeightMigration
如何在 ios 中将 NSString 数据转换为 Uiimage 视图
如何在目标 C 中将 NSInteger 值转换为 int 值? [复制]