0
NSString *username = @"username";
NSString *password = @"password";
NSURL *loginurl = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.reddit.com/api/login/%@",username]];
NSMutableURLRequest *loginrequest = [NSMutableURLRequest requestWithURL:loginurl];
[loginrequest setHTTPMethod:@"POST"];
NSData *loginRequestBody = [[NSString stringWithFormat:@"api_type=json&user=%@&passwd=%@",username,password] dataUsingEncoding:NSUTF8StringEncoding];
[loginrequest setHTTPBody:loginRequestBody];
NSURLResponse *loginResponse = NULL;
NSError *loginRequestError = NULL;
NSData *loginResponseData = [NSURLConnection sendSynchronousRequest:loginrequest returningResponse:&loginResponse error:&loginRequestError];
NSString *loginResponseString = [[NSString alloc]initWithData:loginResponseData encoding:NSUTF8StringEncoding];
NSLog(@"%@",loginResponseString);

NSLog 打印:(替换了一些字母)

{“json”:{“错误”:[],“数据”:{“modhash”:“j5hq16ukw2f17a9c153xxxxxxxxxa72ad989c96c904d49a97e”,“cookie”:“13986184,2012-07-14T12:41:05,349f968b3089af75978xxx}xxx}xxx7ba

我如何访问 modhash 和 cookie?我试过

[loginResponseData valueForKey:@"json"];

但它表示该类不符合键 json 的键值编码

4

2 回答 2

0

loginResponseString 是一个 NSString ——它不知道里面是否有 JSON。您必须将此 JSON 解析为 NSDictionary,然后您可以使用它的方法来检索响应数据。试试我的 JSON 解析器:http: //github.com/H2CO3/CarbonateJSON

使用我的 CarbonateJSON 库的示例:

NSDictionary *parsedResponse = [loginResponseString parseJson];
NSString *modhash = [[[parsedResponse objectForKey:@"json"] objectForKey:@"data"] objectForKey:@"modhash"];
于 2012-07-14T20:03:43.290 回答
0

对于任何在我之后查看此内容的人,您可以查看 H2CO3 的解决方案,但我发现最简单的解决方案是使用 NSJSONSerialization 以受支持的方式执行此操作。

NSError *error;
NSData *jsonData = [loginResponseString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *loginResults = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
NSString *modhash = [[[loginResults valueForKey:@"json"] valueForKey:@"data"]valueForKey:@"modhash"];

为我工作。

于 2012-07-20T21:59:16.177 回答