如何在目标 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】:

首先,您被发送的内容似乎是NSDictionarydescription 方法的结果,例如当你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 值? [复制]

如何在 ios 中将 Base64 编码的 NSString 转换为字节数组(Java)?

如何在目标c中将类对象转换为json字符串