【发布时间】:2016-12-30 06:13:41
【问题描述】:
我从 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);
}];
【问题讨论】:
-
您的响应 JsonResult 是字符串而不是正确的 JSON。
-
您可以检查您的 JSON 格式无效:jsonviewer.stack.hu
-
其实我已经多次序列化了json。所以 JsonResult 是一个字符串,但它包含类似于 JSON 的数据。我已经缩短了 JSON 结果,但最初它是一个长 JSON,其中包含一个字符串中的 JSON。我必须多次反序列化数据,但我没有这样做。
-
你的意思是你必须反序列化键中的每一个值吗?
-
是的,这样我就可以使用该值。但我无法解析我获得的字符串。
标签: ios objective-c json