как анализировать данные JSON и показывать контент в приложении iphone - PullRequest
0 голосов
/ 07 июля 2011

Я хочу, чтобы объект, поступающий в массив, как хранить их в объекте, как когда я использую, как

myArray.id=
myArray.name=

так что должно показывать значения

SBJsonParser *parser = [[SBJsonParser alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=categories&appid=620&mainonly=true"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];
NSArray *results = [parser objectWithString:json_string error:nil];

Ответы [ 4 ]

2 голосов
/ 07 июля 2011

Существует большое руководство по синтаксическому анализу JSON Мэтта Галлахера здесь . Надеюсь, что вы начали в правильном направлении.

Следующие данные должны отображать результаты для вашего кода / JSON:

// Get JSON as a NSString from NSData response
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];

// the JSON response is an Array
NSArray *results = [parser objectWithString:json_string error:nil];
NSDictionary *dictOne = [results objectAtIndex:0];
NSArray *activitiesArray = [dictOne objectForKey:@"activities"];
NSDictionary *dictTwo = [activitiesArray objectAtIndex:0];
NSDictionary *eventDict = [dictTwo objectForKey:@"event"];

NSLog(@"%@ - %@", [eventDict objectForKey:@"category"]);
1 голос
/ 12 апреля 2013

Есть некоторые вещи, на которые вы должны обратить внимание при вызове данных из json, но это довольно просто.Прежде всего вы должны добавить эти две строки вверху m-файла:

#define kAsyncModus dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kYourJsonURL [NSURL URLWithString: @"_THE_JSON_URL_"]

, затем вставьте следующую часть в ваш метод viewDidLoad.«dispatch_async» должен использоваться с предыдущим определенным макросом (вверху), поэтому вы создаете поток.В противном случае ваше приложение может аварийно завершить работу, если, возможно, ответ от сервера не получен, но метод продолжает его ждать.

// get elements of json
dispatch_async(kAsyncModus, ^{
    NSData *data = [NSData dataWithContentsOfURL: kYourJsonURL];
    [self performSelectorOnMainThread:@selector(fetchedData:)
                           withObject:data
                        waitUntilDone:YES];
});       

и создаст новый метод, который будет извлекать отдельные элементы из полученного json

- (void)fetchedData:(NSData *)responseData{
    NSError *error;
    NSDictionary *json =
    [NSJSONSerialization JSONObjectWithData:responseData
                                    options:kNilOptions
                                      error:&error];

    NSArray *results = [json objectForKey:@"_firstElementInJsonFile_"];


    NSLog(@"Results: %@", results);

}

для получения дополнительной информации, вы используете результаты

NSDictionary *specificData = [results objectAtIndex:0];

, и это должно быть сделано.

Я только кратко объяснил это, если вы хотите получить все фактыпосмотрите следующий учебник .Но я не уверен, есть ли поддержка более старых устройств, которые используют

0 голосов
/ 07 июля 2011

JSONKit делает это довольно легко, возможно, стоит задуматься. И это очень быстро.

0 голосов
/ 07 июля 2011

json-framework - путь.

Однако этот JSON недопустим. Скажите, кто бы ни предоставлял API, чтобы гарантировать, что их возвращаемые значения JSON действительны .

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