Разбор Twitter JSON-ленты в IOS - PullRequest
2 голосов
/ 13 марта 2011

Я просто играю с парсером JSON в iOS, он отлично работает в качестве (простого) примера.Но мне было интересно, как можно было бы на самом деле разобрать что-то (немного) более сложное, тенденции JSON в Твиттере, например:

{
    "trends": {
        "2011-03-13 11:42:17": [
            {
                "events": null,
                "query": "Fukushima",
                "promoted_content": null,
                "name": "Fukushima"
            },
            {
                "events": null,
                "query": "Rebecca Black",
                "promoted_content": null,
                "name": "Rebecca Black"
            },
            {
                "events": null,
                "query": "Pearl Harbour",
                "promoted_content": null,
                "name": "Pearl Harbour"
            },
            ...
            {
                "events": null,
                "query": "Magdalena Neuner",
                "promoted_content": null,
                "name": "Magdalena Neuner"
            }
        ]
    },
    "as_of": 1300016537
}

Как можно было бы просто вернуть первые 3 запроса?в данном случае: Фукусима , Ребекка Блэк и Перл-Харбор .

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

for (int i = 0; i < [luckyNumbers count]; i++)
    [text appendFormat:@"%@\n", [luckyNumbers objectAtIndex:i]];

Это для намного более простой подачи, хотя, можно ли к ней подходить так же, как я ищу?


РЕДАКТИРОВАТЬ

Я сейчас пытаюсьчтобы вернуть значение «запроса»:

Итак, я делаю это:

NSLog(@"%@", [[luckyNumbers objectForKey:@"trends"]);

Это, конечно, регистрирует содержимое ключа «тренд», как мне вернутьсяне только первый (и единственный) ключ трендов, но и копать еще один уровень вниз, чтобы вернуть содержимое «запроса» ??

Я также пробовал что-то вроде этого:

NSString *date = [[[luckyNumbers valueForKeyPath:@"trends"] allKeys] description];
NSArray *trends = [luckyNumbers objectForKey:@"trends"];
NSLog(@"%@", [trends valueForKeyPath:date]);

но не уходи ...

Ответы [ 2 ]

1 голос
/ 13 марта 2011

Это зависит от того, какой анализатор JSON вы используете.

Если вы используете анализатор документов , вы получите NSDictionary кодов и массивов. Вам необходимо знать структуру документа , чтобы извлечь нужную информацию. Вы можете использовать любой обычный механизм (цикл for, перечислитель, предикаты и т. Д.)

Если документ очень большой, вам может понадобиться синтаксический анализатор в стиле SAX, например yajl . Вы можете определить методы для использования каждого вида объектов, когда они анализируются. Как только вы получаете то, что ищете (3 запроса или что-то еще), вы прекращаете анализ. Это быстрее и потребляет меньше памяти. Но это немного сложнее.

0 голосов
/ 13 марта 2011

JSON сопоставляет словари и массивы, например, с аналогами (в отличие от XML). То, как вы получите информацию из конкретного файла JSON, будет зависеть от того, как этот файл был спроектирован.

Квадратные скобки в JSON указывают на массивы - фигурные скобки указывают на словари (объекты). Итак, в вашем примере мы видим, что есть словарь, содержащий объект с ключом «тренды», объект, который сам по себе является словарем.

Вам будет легче разобраться с этим, если вы зарегистрируете выходные данные вашего проанализированного массива, потому что вы увидите всю структуру NSArrays и NSDictionaries. Для этого, как только вы проанализируете свой JSON, вы захотите сделать что-то вроде:

NSLog([parsedJsonResult description]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...