2010-10-01 2 views
2

В настоящее время я использую следующий код для разбора отправленной ссылки JSON. Вот как я также отправляю GET-вызов API Google Reader для предстоящего приложения iPhone.Использование JSON Framework на iPhone - ПОМОЩЬ!

- (NSArray *)subscriptionList 
{ 
if(!cookies && [cookies count] == 0) { 
    [self requestSession]; 
} 

NSString * url = @"http://www.google.com/reader/api/0/subscription/list?output=json&client=scroll"; 

ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]]; 
[request setRequestMethod:@"GET"]; 
[request setRequestCookies:cookies]; 
[request addRequestHeader:@"Authorization" value:[NSString stringWithFormat:@"GoogleLogin auth=%@", [self auth]]]; 

[request startSynchronous]; 

subfeeds = [NSMutableArray array]; 

// Create new SBJSON parser object 
SBJSON *parser = [[SBJSON alloc] init]; 

if ([request responseStatusCode] == 200) { 

    NSData * sixty = [request responseData]; 

    NSString * body = [[NSString alloc] initWithData:sixty encoding:NSUTF8StringEncoding]; 
    if (body) { 
     NSArray *feeds = [parser objectWithString:body error:nil]; 
     NSLog(@"Array Contents: %@", [feeds valueForKey:@"subscriptions"]); 
     NSLog(@"Array Count: %d", [feeds count]); 

     NSDictionary *results = [body JSONValue]; 
     NSArray *ohhai = [results valueForKey:@"subscriptions"]; 

     for (NSDictionary *title in ohhai) { 
      subTitles = [title objectForKey:@"title"]; 
      NSLog(@"title is: %@",subTitles); 
     } 
    } 
} 

return subfeeds; 
[subTitles release]; 
[parser release]; 
} 

Я могу успешно разобрать JSON, используя приведенный выше код, и он успешно выводит названия в NSLog. В моем RootViewController.m я вызываю следующее, чтобы захватить этот список подписки (NSArray *).

-(void)viewDidAppear:animated { 
GoogleReader * reader = [[GoogleReader alloc] init]; 
[reader setEmail:gUserString]; 
[reader setPassword:gPassString]; 

//feedItems is a NSArray where we store the subscriptionList NSArray 
feedItems = [reader subscriptionList]; 

//NSString *feedTitle = []; 

NSLog(@"%@", feedItems); 

[reader release]; 
// the rest of the function 
} 

Приведенный выше код успешно работает с введенными учетными данными. Как вы можете видеть, есть также комментарий NSString, называемый feedTitle. Вот где я хочу вытащить @ "title" из разобранного JSON, но я не знаю, как его назвать.

Любая помощь была бы принята с благодарностью!

Это то, что источник JSON выглядит следующим образом:

{"subscriptions": 
[ 
{"id":"","title":"","categories":[],"sortid":"","firstitemmsec":""}, 
{"id":"","title":"","categories":[],"sortid":"","firstitemmsec":""}, 
{"id":"","title":"","categories":[],"sortid":"","firstitemmsec":""}, 
{"id":"","title":"","categories":[],"sortid":"","firstitemmsec":""}, 
{"id":"","title":"","categories":[],"sortid":"","firstitemmsec":""} 
] 
} 

Я заинтересован только в «название» узла.

ответ

3

Ну, это поможет, если вы добавите источник JSON, но довольно легко понять, как SBJSON анализирует входящий JSON.

Просто примера:

{ "myOutDict" : { "key1": "val1" , "key2" : "val2"} } 

Это JSON строка будет обработана, так что вы можете получить доступ к нему, используя этот код

NSDictionary* myOuterdict = [feeds valueForKey:@"myOutDict"]); 
NSString* val1 = [myOuterdict valueForKey:@"key1"]); 
NSString* val2 = [myOuterdict valueForKey:@"key2"]); 

Редактировать: Проверено мой личный канал чтения Google:

JSON выглядит следующим образом

{ 
    "subscriptions": [{ 
     "id": "feed/http://adambosworth.net/feed/", 
     "title": "Adam Bosworth's Weblog", 
     "categories": [], 
     "sortid": "0B5B845E", 
     "firstitemmsec": "1243627042599" 
    }, 
    { 
     "id": "feed/http://feeds.feedburner.com/zukunftia2", 
     "title": "Zukunftia", 
     "categories": [], 
     "sortid": "FCABF5D4", 
     "firstitemmsec": "1266748722471" 
    }] 
} 

Так соответствующая Objective C код будет:

NSArray* subscriptions= [feeds valueForKey:@"subscriptions"]); 
foreach(NSDictionary* item in subscriptions) { 
    // Do stuff 
    // NSString* title = [item valueForKey:@"title"] 
    // NSString* id = [item valueForKey:@"id"] 
} 
+0

Хорошо, я могу легко разобрать JSON, однако моя главная потребность в том, чтобы на самом деле выделить заголовок фида в textLabel.text UITableViewCell. –

+0

Это довольно легко, в чем проблема? просто используйте массив подписок в качестве источника данных. –

+0

Будучи жестоко честным, я понятия не имею, как это сделать. Я знаю только JSON, поэтому я немного смущен. –

0

Я не уверен, что понял вопрос. Вы пытаетесь получить заголовок для фида в целом или для каждого элемента? Потому что я не вижу свойства title для массива подписок в исходном JSON.

+0

Добавлен источник JSON :) –

Смежные вопросы