到目前为止,我在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'对象/数组(?)
答案 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数据也适用于您的情况。