美好的一天。我请求某个服务器,并且挑衅地我在那里有一些 JSON 数据,所以我正在尝试解析它。我卡在我实际解析它的位置。所以我有一个名为parseJson的方法,它需要NSDictionry作为参数,所以它看起来如何
-(void)parseJson:(NSDictionary*)jsonData{
[jsonData valueForKey:@"email"];
}
正如你在这里看到的不多,但是当代码达到
[jsonData valueForKey:@"email"];
我从昨天开始为iOS开发,唯一的例外是对我来说很奇怪,这是下一个。
此类不符合密钥电子邮件的键值编码。
所以通过谷歌搜索,我什么也没发现...几乎在每个 JSON PARSING 教程中都编写了这一行代码,所以我非常困惑这个异常意味着什么......请帮忙,我做错了什么?
完整请求代码
-(void) makeRequest{
// Create the request.
__block NSString *returnResponse = @"hello";
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue ]];
//Create an URLRequest
NSURL *url = [NSURL URLWithString:@"http://jsonplaceholder.typicode.com/posts"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
//Create POST Params and add it to HTTPBody
NSString *params = @"api_key=APIKEY&email=example@example.com&password=password";
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
//Create task
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest: urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(response!=NULL){
returnResponse =[NSString stringWithFormat:@"%@",response];
}else{
returnResponse = [NSString stringWithFormat:@"%@",error.description];
}
[self hideSpinner];
NSString* jsonString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
[self parseJson:jsonString];
}];
[dataTask resume];
}
好的,我现在已将方法更改为
-(void)parseJson:(NSString*)jsonData{
NSDictionary * dictionary = [[NSDictionary alloc] initWithContentsOfFile:jsonData];
NSLog(@"%@",jsonData);
NSString* mystring = [dictionary valueForKey:@"email"];
NSLog(@"%@",mystring);
}
这是我在记录字符串时得到的输出
2016-01-22 00:25:48.690 testproject[627:83537] {
"api_key": "APIKEY",
"email": "example@example.com",
"password": "password",
"id": 101
}
2016-01-22 00:25:48.690 testproject[627:83537] (null)
如您所见,异常问题消失了,但现在我得到了 NULL 值。但是你可以看到,我只在上面的一行让我的儿子有了电子邮件密钥字符串......所以我完全不知道发生了什么。
valueForObject:
方法与NSDictionary
无关。它由KVO使用,代表键值观察。您可以使用[]
或objectForKey:
方法从NSDictionary
中检索对象。以下是示例:
dictionary[@"email"]
//or
[dictionary objectForKey:@"email"]
//已编辑
不要将NSObject
转换为NSString
并尝试使用KVO
或字典方法/语法访问属性,请尝试使用以下代码解析 NSData:
NSDictionary *JSONDictionary =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]
NSString *email = JSONDictionary[@"email"];
您应该能够使用我在答案的第一个版本中提到的方法/语法从JSONDictionary
中检索对象。