Разбор строки JSON в NSMutableArray - PullRequest
0 голосов
/ 12 февраля 2012

Это моя строка:

[{"id":"1","nome":"Adriatik"},{"id":"2","nome":"Ard"},{"id":"3","nome":"Albana"},{"id":"4","nome":"Adriana"}]

Я хотел бы проанализировать все «имя» строки JSON в NSMutableArray.

Извините за мой английский!

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Всякий раз, когда мне нужно обработать некоторый код JSON, первое, что мне нравится делать, - это создавать класс на основе текста JSON. Так, например, если ваш JSON представляет состояние США, создайте класс «State».

Для этого можно использовать классный маленький продукт. Он называется Objectify и стоит около 15 долларов. Без сомнения, люди могут посоветовать другие бесплатные вещи, которые могут сделать что-то подобное.

Для фактического анализа Json я использую SBJson . Для Objective-C существует довольно много Json-фреймворков, поэтому определенно посмотрите, что вам нравится.

Далее, с SBJson, выполните фактический анализ:

-(NSDictionary *)parseJsonFromUrl
{
    NSAssert(mUrl, @"Must set a url before invoking %@", __PRETTY_FUNCTION__);

    // Create new SBJSON parser object
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    // Prepare URL request to download JSON
    NSURLRequest *request = [NSURLRequest requestWithURL:mUrl];

    // Perform request and get JSON back as a NSData object
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

    // Get JSON as a NSString from NSData response
    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

    // parse the JSON response into an object
    // Here we're using NSArray since we're parsing an array of JSON status objects
    return [parser objectWithString:json_string error:nil];
}

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

-(void)downloadJsonData
{    
    NSDictionary *statesDict = [self parseJsonFromUrl];

    NSMutableArray *statesArray = [NSMutableArray arrayWithCapacity:[statesDict count]];

    for (NSDictionary *stateDict in stateDict)
    {
        State *aState = [[[State alloc] init] autorelease];
        aState.stateId = [stateDict valueForKey:@"id"];
        aState.name = [stateDict valueForKey:@"name"];

        [statesArray addObject:aState];
    }
}

Обратите внимание, что я использую имя свойства stateId, а не id, чтобы не конфликтовать с типом указателя объекта Objective-C.

0 голосов
/ 14 февраля 2012

Использовать классы SBJson и вызывать метод -JSONValue

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
   // NSLog(@" Response String %@", responseString);
    //converted response json string to a simple NSdictionary


    NSMutableArray *results = [responseString JSONValue];
...