Разбор JSON с Objective-c? - PullRequest
       3

Разбор JSON с Objective-c?

0 голосов
/ 10 июня 2019

Моя цель - проанализировать JSON pushshift.io JSON с помощью Objective-C. Я успешно загрузил JSON, но при попытке разобрать текст я получаю сообщение об ошибке unrecognized selector sent to instance. Как получить значение для каждого ключа "author", "author_flair_type" и т. Д. И преобразовать это значение в строковый объект?

Вот пример JSON:

{
    "data": [
        {
            "all_awardings": [],
            "author": "Le-Dragoon",
            "author_flair_css_class": null,
            "author_flair_richtext": [],
            "author_flair_type": "text"
        },
        {
            "all_awardings": [],
            "author": "Shiroi_Kage",
            "author_flair_css_class": null,
            "author_flair_richtext": [],
            "author_flair_text": null,
            "author_flair_type": "text"
        }
    ]
}

Вот код, который я использую для получения JSON с URL:

int main(int argc, char *argv[], char *envp[]) {
    NSError *error;
    NSString *url_string = [NSString stringWithFormat: @"https://api.pushshift.io/reddit/search/submission/?sort_type=created_utc&subreddit=rasberry_pi"];
    NSData *data = [NSData dataWithContentsOfURL: [NSURL URLWithString:url_string]];
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

    return 0;
}

Ответы [ 2 ]

1 голос
/ 11 июня 2019
int main(int argc, char *argv[], char *envp[]) {
    NSError *error;
    NSString *url_string = [NSString stringWithFormat:@"https://api.pushshift.io/reddit/search/submission/?sort_type=created_utc&subreddit=rasberry_pi"];
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url_string]];
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

    if (error) {
        NSLog(@"error: %@", error);
        return 1;
    }

    NSArray *entities = result.allValues.firstObject;

    for (NSDictionary *dict in entities) {
        NSLog(@"author: %@, author_flair_type: %@", dict[@"author"], dict[@"author_flair_type"]);
    }

    return 0;
}

Кстати, вы должны знать, что метод dataWithContentsOfURL - это синхронная работа сети.

1 голос
/ 10 июня 2019

Возвращаемое значение JSONObjectWithData, скорее всего, будет словарем, а не массивом. Объект может содержать массив. Вы можете попробовать что-то вроде:

     if (responseStatusCode == 200) {

         NSError* error;
         NSDictionary* json = [NSJSONSerialization
                               JSONObjectWithData:data //1
                               options:NSJSONReadingAllowFragments
                               error:&error];

         NSMutableArray *maAnimalsList = [[NSMutableArray alloc] init];

         for(id key in json) {

             [maAnimalsList addObject:key];
         }

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