美好的一天。我正在请求某个服务器并且我在那里有一些JSON数据,所以我正在尝试解析它。我卡在我正在解析它的位置。所以我有一个名为parseJson的方法需要NSDictionry作为参数,所以这里看起来如何
-(void)parseJson:(NSDictionary*)jsonData{
[jsonData valueForKey:@"email"];
}
因为你在这里看不多,但是当代码到达
时我得到了exeption [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值..但你可以看到上面只有一行我的儿子用电子邮件密钥字符串....所以我完全没有线索什么去上。
答案 0 :(得分:0)
valueForObject:
方法与NSDictionary
无关。它由KVO使用,代表键值观察。您可以使用NSDictionary
或[]
方法从objectForKey:
检索对象。以下是示例:
dictionary[@"email"]
//or
[dictionary objectForKey:@"email"]
// <强> EDITED 强>
请尝试使用以下代码解析NSData,而不是将NSObject
转换为NSString
并尝试使用KVO
或字典方法/语法访问属性:
NSDictionary *JSONDictionary =[NSJSONSerialization JSONObjectWithData:data options:0 error:nil]
NSString *email = JSONDictionary[@"email"];
您应该能够在答案的第一个版本中使用我提到的方法/语法从JSONDictionary
检索对象。