在objectiveC(SBJSON)对象和数组中解析JSON

时间:2012-03-21 05:23:43

标签: objective-c json parsing nsdictionary

到目前为止,我在JSON中发现{}中包含的所有内容都是对象(objC:NSDictionary),[]中包含的任何内容都是数组(objC:NSArray)。

我已阅读并重新阅读有关该主题的文章> How to parse JSON into 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数据的对象和数组的排序吗?我想向下钻取树,以便我可以访问'day name','session starttime / endtime / sessionname','numlaps'& 'class'但我似乎无法超越'day'对象/数组(?)

3 个答案:

答案 0 :(得分:1)

您所指的是schedule是最外面的{}中包含的对象。试试这个:

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

然后像以前一样继续。

此外,如果您使用的是iOS 5,则可以使用NSJSONSerialization类 - 使用它几乎相同,您可能会获得更好的性能,而且您不必担心其中的麻烦使用第三方库。

答案 1 :(得分:0)

在需要解析的地方调用

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;
    }

答案 2 :(得分:0)

这是我使用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(考虑阅读this),但仍然需要解析如上所述的json数据也适用于您的情况。