2015-11-28 4 views
-1

Я использую Objective C и вот моя проблема ..Получить значения из Json объекта Objective C

(
     { 
     error = 0; 
     newsletter = (
        { 
         date = "2015-11-23"; 
         description = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop p"; 
         id = 42; 
         image = "mylink/uploads/14482883361619729430.png"; 
         "post_count" = 2; 
         "posted_by" = admin; 
         title = Testing; 
        }, 
        { 
        date = "2015-11-28"; 
        description = "I am testing"; 
        id = 48; 
        image = "mylink/ips/uploads/14486977841870344075.jpg"; 
        "post_count" = 1; 
        "posted_by" = admin; 
        title = "Ips Informa"; 
        } 
        ); 
     } 
) 

Выше моя JSON строки я извлечение из asihttpRequest

теперь я хочу, чтобы отобразить бюллетень, например, .date, название, описание в виде таблицы

я только что получил массив со следующим:

NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1 
                    options:NSJSONReadingMutableContainers 
                    error:&err]; 

Я получаю выход со следующим кодом:

NSLog(@"NewLetter Title: %@", json); 

графа следующим образом:

NSLog(@"Count is - %lu",[json count]); 

Граф является - 1

Я новичок в объективном C, я пытался решить , но не нашел способ получить данные бюллетеня?

+0

Не перекладывайте свои вопросы. – rmaddy

ответ

1

Каждое сообщение JSON имеет один объект верхнего уровня. Если вы посмотрите на JSON:

(
    { 

Вы можете видеть, что у вас есть топ-уровня ( массива ) из { словарей }. См. json.org для получения полной информации.

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

NSArray* json = [NSJSONSerialization JSONObjectWithData:responseData 
               options:0 
                error:&err]; 
if ([json isKindOfClass:[NSArray class]]) { 
    for (NSDictionary *dict in json) { 
     NSNumber *error = dict[@"error"]; 
     NSArray *newsletter = dict[@"newsletter"]; 
     for (NSDictionary *entry in newsletter) { 
      NSNumber *identity = entry[@"id"]; 
      NSString *description = entry[@"description"]; 
      // etc. 
     } 
    } 
} else if (err) { 
    NSLog(@"Error in JSON: %@", [err localizedDescription]); 
} else { 
    NSLog(@"Unsupported JSON received"); 
} 

Я не знаю, почему вы получаете count = 1, поскольку это не соответствует опубликованному вами JSON; вы должны зарегистрировать фактический JSON для целей отладки:

NSLog(@"Received JSON: %@", [NSString stringWithUTF8String:[responseData bytes]]); 
+0

Спасибо allot works – user3015451

+0

@trojanfoe: Счет является одним, потому что корневой массив содержит один элемент, и нет сбоя, потому что оба ' NSArray' и 'NSDictionary' отвечают на' count'. – vadian

+0

@vadian Действительно; мой код неверен; в словаре есть информационный массив. Я исправлю это. – trojanfoe

0

JSON теперь является NSDictionary, поэтому использовать регулярные аксессоров:

NSDictionary *firstObject = json[0]; 

NSDictionary *newsletter = firstObject[@"newsletter"]; 

NSString *firstDescription = newsletter[@"description"]; 
+0

Первая строка кода, которую вы удалили, была вздор. Вы должны были исправить это, а не удалять. – gnasher729

+1

Нет, вы должны действовать зрелым и ставить под сомнение, а не называть это «ерундой» в течение двух минут после того, как я разместил ее. Я просмотрел код, который я опубликовал, и исправил его. Оставьте свою грубость дома, пожалуйста, @ gnasher729: это не место для нее. – davbryn

+0

Когда я опубликовал свой комментарий, это был вздор. И вы никогда не исправляли бессмыслицу, вы ее удалили, когда ее легко устранить. – gnasher729

0

Объект json содержит NSArray (представлен в скобках), с одним пунктом, поэтому счетчик равен 1.

Get содержимое элемента с

json[0] 

который является NSDictionary (представленные скобки).

Получить значение ключа newsletter с

json[0][@"newsletter"] 

Это значение опять NSArray.

Продолжить извлечения элементов массива с помощью цифровой подписки (например, [0]) и словарных элементов по ключу подписки (например, [@"date"])

+0

Кажется, кому-то не понравился ваш ответ. Я не вижу в этом ничего плохого. Собственно, в этом нет ничего плохого. На самом деле, вы вернулись к нулю :-) – gnasher729

-1

Если вы новичок в Objective-C, то вы должны узнать все из следующих действий:

One. Классы NSArray и NSDictionary.

Два. Метод isKindOfClass, который сообщает вам, что такое объект.

Три. Итерация через массивы, предпочтительно с использованием быстрого перечисления.

Четыре. Доступ к клавишам словаря, используя objectForKey или предпочтительно нотацию индекса.

Когда вы знаете все эти четыре, вы можете начать разбирать JSON.

BTW. Вы не можете получить «дату информационного бюллетеня», потому что может быть любое количество информационных бюллетеней, а у вас есть две даты.Вам действительно нужно подумать о том, какие данные вы получаете и что вы хотите с ними делать.

+0

Это не отвечает на вопрос вообще - слишком расплывчато. Вы могли бы также сказать, что искатель «учит объективу-c». – davbryn

+0

Это абсолютно то, что он должен делать. Что-то не так с тем, чтобы люди рассказывали Objective-C, если они хотят писать Objective-C код? – gnasher729

+0

* вздох * да: или иначе это было бы ответом на любой объектив-c-тег ... – davbryn

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