2016-12-30 78 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)。 –