анализировать JSON в объектах и ​​массивах targetC (SBJSON) - PullRequest
0 голосов
/ 21 марта 2012

До сих пор я обнаружил в JSON, что все, что заключено в {}, это объекты (objC: NSDictionary), а все, что заключено в [], это массив (objC: NSArray).

Я прочитал иперечитайте эту статью о теме> Как разобрать JSON в Objective C - SBJSON

У меня есть файл .json с данными, смоделированными так:
http://elbee101.com/dummySchedule.json

... и теперь для кода:

SBJSON *parser = [[SBJSON alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://elbee101.com/dummySchedule.json"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

NSDictionary *schedule = [parser objectWithString:json_string error:nil];
NSDictionary *day = [schedule objectForKey:@"day"];
NSArray *myList = [day objectForKey:@"name"];
NSLog(@"myList %@", myList);
NSArray *numLaps = [myList objectAtIndex:0];
NSLog(@"numlaps%@ ",  numLaps);

Я получаю "myList (null)" и "numlaps (null)" из приведенного выше кода?! @

Вопрос: Может ли кто-нибудь указать мне порядок расположения объектов и массивов относительно моих данных json?Я хочу развернуть дерево, чтобы получить доступ к «имени дня», «времени начала / конца сеанса / имени сеанса», «numlaps» и «классу», но я не могу пройти мимо объекта / массива «день»(?)

Ответы [ 3 ]

1 голос
/ 21 марта 2012

То, что вы называете schedule, - это объект, заключенный во внешнюю {}. Попробуйте это:

NSDictionary *json = [parser objectWithString:json_string error:nil];
NSDictionary *schedule = [json objectForKey:@"schedule"];

Затем продолжайте как прежде.

Кроме того, если вы работаете на iOS 5, вы можете использовать класс NSJSONSerialization - при использовании он практически такой же, вы можете получить более высокую производительность, и вам не придется беспокоиться о трудностях использования сторонняя библиотека.

0 голосов
/ 21 марта 2012

Вот как я использую NSJsonSerialization для анализа объекта json.

    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://elbee101.com/dummySchedule.json"]];
    NSError *err;
    NSDictionary* json = [NSJSONSerialization 
                          JSONObjectWithData:data
                          options:kNilOptions 
                          error:&err]; // 
    NSDictionary *schedule_dict = [json objectForKey:@"schedule"]; 
    NSArray *days = [schedule_dict objectForKey:@"day"];//Days Array from day Object
    NSDictionary *dayOne = [days objectAtIndex:0];
    NSDictionary *dayTwo = [days objectAtIndex:1];
    NSLog(@"THE DAY ONE : %@",dayOne);
    NSLog(@"THE DAY TWO : %@",dayTwo);

Надеюсь, это поможет вам ... Примечание: Если вы не хотите использовать NSJsonSerailization (рассмотрите чтение этого ), но все же синтаксический анализ данных json, как указано выше, будет применим и в вашем случае.

0 голосов
/ 21 марта 2012

звоните туда, где вам когда-либо нужно разобрать

NSMutableArray *arr=[[NSMutableArray alloc] init];
arr=[[Headparse getArrayFromUrl:@"http://elbee101.com/dummySchedule.json"] retain];
NSLog(@"%@",[arr description]);
[arr release];

пишите этот метод как пользовательский класс, когда вам нужно

+(NSMutableArray *) getArrayFromUrl: (NSString *)actionType
 {
NSMutableData *responseData1= [NSMutableData data] ;
responseData1 = [NSMutableData dataWithContentsOfURL:[NSURL URLWithString:actionType]];
// NSLog(@"%@",responseData1);
NSString *responseString1 = [[NSString alloc] initWithData:responseData1 encoding:NSUTF8StringEncoding];
 //NSLog(@"REs:-->%@",responseString1);
//[responseData1 release];
responseData1 = nil;
NSMutableArray *responseArray = [[NSMutableArray alloc]init];
responseArray = (NSMutableArray *)[responseString1 JSONValue];
// NSLog(@"ghfchfvghv%@",responseArray);
[responseString1 release];
return responseArray;
    }
...