【问题标题】:How to convert NSString to NSDictionary in objective c?如何在目标 c 中将 NSString 转换为 NSDictionary?
【发布时间】: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 有对象。 那么,如何在目标 c 中将 NSString 转换为 NSDictionary? 请帮忙!

【问题讨论】:

  • 1.第一个代码 sn-p 不是 NSString。 2. 你是如何“解析”为 JSON 的? 3. 你想做什么?请澄清您的问题,这很难理解。
  • 我已经编辑了我的问题
  • 不要将 nil 传递给错误,它可能包含您需要查看发生了什么的信息。

标签: ios objective-c json


【解决方案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"}}"; // 但还是一样的错误
        猜你喜欢
        • 2016-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 2018-01-15
        • 1970-01-01
        • 2015-04-12
        • 1970-01-01
        相关资源
        最近更新 更多