Разбор строки 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];