更新4月22日:JSON解析只顯示前20項
問題解決了:原來,這需要API OAUTH工作......這解釋了爲什麼它會在瀏覽器中正確加載(我已經登錄),而不是其他應用程序,如JSON驗證器或我自己的應用程序。
我想寫一個類,它將在Lion上的Xcode 4.3.2中獲取和解析JSON文件。如果這是一個愚蠢的問題,我只是編了幾個星期纔對不起!代碼似乎工作正常,除了只有JSON文件中的前20個條目出現(應該有200)。任何想法,爲什麼這可能是?
- (void) initJSON
{
NSString *urlstri = [[NSString alloc] initWithFormat:@"http://api.t.sina.com.cn/statuses/followers.json?source=?????&count=200&screen_name=%@", userName];
NSURL *newURL = [[NSURL alloc] initWithString:urlstri];
NSURLRequest *request = [NSURLRequest requestWithURL:newURL];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:NO];
}
];}
- (void) fetchedData:(NSData *)responseData {
//parse out the json data
NSError* error;
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:responseData //1
options:kNilOptions
error:&error];
NSArray* newestFollower = [json objectForKey:@"users"]; //2
fnumber = 0;
mnumber = 0;
int arraySize = [newestFollower count];
NSLog(@"%i",arraySize);
for (i=0; i<arraySize; ++i) {
NSDictionary* userProfile = [newestFollower objectAtIndex: i];
NSString* userGender = [userProfile objectForKey:@"gender"];
//NSLog(@"%@", userGender);
if([userGender isEqualToString:@"m"]){
//NSLog (@"man");
++mnumber;
}
if([userGender isEqualToString:@"f"]){
//NSLog(@"notman");
++fnumber;}
}
mOutput = [NSNumber numberWithInt:(mnumber)];
fObj = [NSString stringWithFormat:@"%i", fnumber];
mObj = [NSString stringWithFormat:@"%i", mnumber];
NSLog (@"Boys:%@", mObj);
NSLog (@"Girls:%@", fObj);
您是否嘗試過複製您的'urlStri'並粘貼到瀏覽器中以驗證服務器是否確實返回了您想要的200個項目?當你在你的代碼中的'arraySize'是否是20或200? – jonkroll 2012-04-19 15:26:58
感謝您的快速回復。當我將URL複製到瀏覽器時,它將返回所有200個項目,但arraySize只有20個。如果我NSLog json NSDictionary,我也只能得到20個項目。 – scottmacd 2012-04-19 16:37:51
您的JSON格式是否有效?請在[jsonlint.org](http://jsonlint.org)中對其進行驗證並報告 – Lefteris 2012-04-19 18:01:04