2014-02-16 2 views
1

Я пытаюсь разобрать канал JSON из своего блога Wordpress. У меня есть специальное поле, которое мне нужно использовать, но не могу заставить его работать с SBJson. Вот как мой канал выглядит (я раздел другие бесполезные вещи):запрос iOS SBJson идет плохо

{ 
    "status":"ok", 
    "count":27, 
    "count_total":2552, 
    "pages":95, 
    "posts":[ 
     { 
     "id":8978, 
     "type":"post", 



     "custom_fields":{ 

     "btnNameScrollBlog":[ 
      "<null>" 
     ] 
     "author-name":[ 
      "John Doe" 
     ] 
    }, 
} 

Я пытаюсь получить имя автора. Вот код, который я использовал для получения корма на прошивке:

-(void)downloadRecentPostJson{ 

    [recentPost removeAllObjects]; 
    [previous_total_per_page removeAllObjects]; 


    NSURL *urls = [NSURL URLWithString:[NSString stringWithFormat:@"%@/?json=%@",url,methodJson]]; 
    NSData *sa = [NSData dataWithContentsOfURL:urls]; 
    NSString *jsonString = [[NSString alloc] initWithData:sa encoding:NSUTF8StringEncoding]; 


    NSDictionary *result = [jsonString JSONValue]; 
    NSArray* posts = [result objectForKey:@"posts"]; 
    total_page = [[result objectForKey:@"pages"] intValue]; 
    total_post_per_page = [[result objectForKey:@"count"] intValue]; 

    [previous_total_per_page addObject:[result objectForKey:@"count"]]; 

    current_page = 1; 

    for (NSDictionary *post in posts) { 
     id custom = [post objectForKey:@"custom_fields"]; 
     id thumbnail = [post objectForKey:@"thumbnail"]; 
     NSString *featuredImage = @""; 
     if (thumbnail != [NSNull null]) 
     { 
      featuredImage = (NSString *)thumbnail; 
     } 
     else 
     { 
      featuredImage = @"0"; 
     } 





     [recentPost addObject:[NSArray arrayWithObjects:[post objectForKey:@"id"],[post objectForKey:@"title_plain"],[post objectForKey:@"excerpt"],featuredImage,[post objectForKey:@"content"],[post objectForKey:@"date"],[post objectForKey:@"comments"],[post objectForKey:@"comment_status"],[post objectForKey:@"scrollBlogTemplate"],[post objectForKey:@"url"],[post objectForKey:@"specialBtn"],[post objectForKey:@"btnNameScrollBlog"],[post objectForKey:@"latScrollBlog"],[post objectForKey:@"longScrollBlog"],[post objectForKey:@"openWebUrlScrollBlog"],[post objectForKey:@"gallery"], [custom objectForKey:@"author-name"], nil]]; 

    } 

Я попытался установить custom_fields объект как идентификатор: пользовательский идентификатор = [сообщение objectForKey: @ «custom_fields»];

А затем использовать его, чтобы добраться до имени автора: [пользовательские objectForKey: @ "автор-имя"]

Но я получаю NSInvalidArgumentException 'причина:' - [__ NSArrayM rangeOfString]: неопознанная ошибка селектора ,

Любые предложения?

Что делать, если я попытаюсь получить название категории из сообщения?

"categories": [ 
       { 
        "id": 360, 
        "slug": "deals", 
        "title": "Deals", 
        "description": "", 
        "parent": 0, 
        "post_count": 28 
       } 
      ], 

Я помещаю категории в массив вроде этого? Как мне получить титул? Я попробовал это и получил объект в индексе 3, но получил ошибку.

NSArray *cat = [post objectForKey:@"categories"]; 
+3

сообщение об ошибке означает, что «автор-название» является NSArray но код обрабатывает его, как если бы это был NSString. – Anna

+0

Ваш Json не отформатирован правильно, попробуйте использовать http://jsonlint.com/ – Hakim

ответ

3

'-[__NSArrayM rangeOfString:]: unrecognized selector error. означает, что вы лечите массив в виде строки. Ваш код почти правильно, вам просто нужно, чтобы получить первый элемент из массива (желательно с проверкой, что массив не пуст), потому что

"author-name":[ 
    "John Doe" 
] 

представляет собой массив, содержащий одну строку. Итак:

NSArray *names = [custom objectForKey:@"author-name"]; 
NSString *name = [names firstObject]; 

NSArray *categories = [custom objectForKey:@"categories"]; 
NSDictionary *category = [categories firstObject]; 
NSString *title = [category objectForKey:@"title"]; 
+0

Вы были правы, спасибо! –

+0

Не могли бы вы помочь мне с названием категории? Я запутался. –

+0

Где он вложен? Опять же, он содержит массив, поэтому вам нужно индексировать в массив, чтобы получить словарь, и они используют ключ. – Wain

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