Objective c 如何通过api登录reddit来获取modhash和cookie?

Objective c 如何通过api登录reddit来获取modhash和cookie?,objective-c,json,reddit,Objective C,Json,Reddit,NSLog打印此内容:(替换了一些字母) {“json”:{“errors”:[],“data”:{“modhash”: “J5HQ16UKW2F17A9C153xxxxxxA72AD989C96C904D49A97E”,“cookie”: “139861842012-07-14T12:41:05349F968B3089AF75978XXXXXXXXXXXXX761397BA0” 如何访问modhash和cookie?我试过了 NSString *username = @"username";

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

{“json”:{“errors”:[],“data”:{“modhash”: “J5HQ16UKW2F17A9C153xxxxxxA72AD989C96C904D49A97E”,“cookie”: “139861842012-07-14T12:41:05349F968B3089AF75978XXXXXXXXXXXXX761397BA0”

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

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);

但是它说这个类不符合键值编码,因为键json是一个NSString,它不知道里面是否有json。您必须将此JSON解析为NSDictionary,然后才能使用其方法检索响应数据。试试我的JSON解析器:

使用my EJSON库的示例:

[loginResponseData valueForKey:@"json"];

对于在我之后关注这个问题的人,您可以查看H2CO3的解决方案,但我发现最简单的解决方案是使用NSJSONSerialization以受支持的方式来实现

NSDictionary *parsedResponse = [loginResponseString parseJson];
NSString *modhash = [[[parsedResponse objectForKey:@"json"] objectForKey:@"data"] objectForKey:@"modhash"];

为我工作。

好的,我会留意的。不过,我并没有试图从loginResponseString读取数据,这只是为了记录其中的内容。我试图读取LoginResponsTa。但是LoginResponsTa也只是一些字节序列——它不知道它是JSON还是垃圾,反正你不能随心所欲。我很难让它正常工作。[\uu NSCFString parseJson]:发送到实例0xde78260的无法识别的选择器是我得到的错误。您还没有将我的库添加到您的项目中,是吗?我已将您的文件复制到我的项目中,是否有其他方法?
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"];