在Objective C中反序列化JSON字符串

时间:2016-12-30 06:13:42

标签: ios objective-c json

我从REST API收到了NSData对象data。那包含我要解析的JSON数据。

 {   
    JsonResult = "[{
                   \"IsAuth\":\"true\",
                   \"User\":\"
                   [
                     {
                      \\\"userid\\\":\\\"josephH\\\",
                      \\\"firstname\\\":\\\"joseph\\\",
                      \\\"lastname\\\":\\\"Henry\\\",
                      }
                   ]\"}]"
 }

这个语句给我的结果是一个像下面的字符串,我无法解析为JSON。 myData = [data valueForKey:@"JsonResult"];

                   "[{
                       \"IsAuth\":\"true\",
                       \"User\":\"
                       [
                         {
                          \\\"userid\\\":\\\"josephH\\\",
                          \\\"firstname\\\":\\\"joseph\\\",
                          \\\"lastname\\\":\\\"Henry\\\",
                          }
                       ]\"}]"

当我尝试将此mydata传递给JSONSerialization时代码崩溃。

如何将上述字符串转换为NSDictionary,以便我可以解析它们并使用IsAuth和User的值。?

代码:

    [LDService authenticateUser:Uname.text passwordString:Password.text completeBlock:^(NSData * data){

        NSError *error;
        NSData *jsonData;
        NSString *jsonString = nil;
        NSMutableDictionary *jsonDict;
        if([NSJSONSerialization isValidJSONObject:data])
        {
            jsonData = [NSJSONSerialization dataWithJSONObject:data
                                                               options:kNilOptions
                                                                 error:&error];
            jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
        NSString *formattedString = [jsonString stringByReplacingOccurrencesOfString:@"\\\"" withString:@"'"];
        NSLog(@"Formatted string %@",formattedString);
        [jsonDict setObject:formattedString forKey:@"JsonResult"];
        NSLog(@"Parsed json %@",jsonDict);

    }];

2 个答案:

答案 0 :(得分:1)

将您的数据传递为data

NSError *error;
NSString *jsonString = nil;
if([NSJSONSerialization isValidJSONObject:data])
{
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data
                                                       options:kNilOptions
                                                         error:&error];
    jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}

然后用@"\\\"

替换@"'"的出现
NSString *formattedString = [jsonString stringByReplacingOccurrencesOfString:@"\\\"" withString:@"'"];

然后使用此formattedString。

答案 1 :(得分:0)

我已经从Json formatter & Validator调查了你的json文件,你的json文件中有很多错误,所以首先从这个验证器检查你的文件,这个格式化程序会给你错误的描述。重新构建你的json文件,如果你仍然遇到任何问题,那就问。