2016-12-30 84 views
-2

我从REST API收到NSData对象data。包含我想分析的JSON数据。目标C中的Deserialise 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\\\", 
          } 
         ]\"}]" 

当我试图通过这个mydataJSONSerialization代码崩溃。

如何将上述字符串转换为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); 

    }]; 
+0

您的回应JsonResult是字符串不正确的JSON。 –

+0

你可以检查你的JSON无效格式:http://jsonviewer.stack.hu –

+0

其实,我已经多次序列化了json。所以JsonResult是一个字符串,但它包含的数据就像JSON。我缩短了JSON结果,但最初它是一个很长的JSON,它在一个字符串中包含JSON。我必须多次反序列化数据,但我没有这样做。 –

回答

0

我调查从Json formatter & Validator您的JSON文件,有很多在你的JSON文件的错误,因此首先从这个验证检查您的文件,此格式为您提供了描述错误。重新构建你的json文件,如果你仍然有任何问题,然后问。

+0

字符串中没有问题,因为它纯粹不是JSON字符串,但它可以解析,我做了很快速的,我可以访问IsAuth的值,我不能在客观C中做到这一点。 –

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。

+0

评论不是用于扩展讨论;这个对话已经[移到聊天室](http://chat.stackoverflow.com/rooms/131887/discussion-on-answer-by-iyoung-deserialise-json-string-in-objective-c)。 –