Использование JSON Framework на iPhone - помогите!
-
26-09-2019 - |
Вопрос
В настоящее время я использую следующий код для анализа ссылки JSON. Вот как я также отправляю получить звонок в API Google Reader для предстоящего приложения для 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. Это где я хочу потянуть @ «Название» от анавровных 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":""}
]
}
Я заинтересован в узле «Название».
Решение
Ну, это поможет, если вы добавили источник JSON, но это довольно легко понять, как SBJSON PARSES входящие JSON.
Просто пример:
{ "myOutDict" : { "key1": "val1" , "key2" : "val2"} }
Эта строка JSON будет проанализирована, чтобы вы могли получить доступ к ней, используя этот код
NSDictionary* myOuterdict = [feeds valueForKey:@"myOutDict"]);
NSString* val1 = [myOuterdict valueForKey:@"key1"]);
NSString* val2 = [myOuterdict valueForKey:@"key2"]);
Редактировать: Проверил мой личный канал Google Reader:
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"
}]
}
Таким образом, соответствующий объективный C-код будет:
NSArray* subscriptions= [feeds valueForKey:@"subscriptions"]);
foreach(NSDictionary* item in subscriptions) {
// Do stuff
// NSString* title = [item valueForKey:@"title"]
// NSString* id = [item valueForKey:@"id"]
}
Другие советы
Я не уверен, что понимаю вопрос. Вы пытаетесь получить заголовок для корма в целом или на каждого элемента? Поскольку я не вижу свойство титула для массива подписок в исходном JJSON.