Разбор строки JSON в NSMutableArray

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

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

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

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

2 ответа

Решение

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

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

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

Затем, с 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.

Используйте классы 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];
Другие вопросы по тегам