我必须在iOS上解析这个JSON。
{
"log_by_dates": {
"logs": [
{
"date": "Wednesday 5 December 2012",
"exercises": "0",
"workouts": "0",
"log_entries": "0"
},
{
"date": "Tuesday 4 December 2012",
"exercises": "4",
"workouts": "2",
"log_entries": "7"
}
]
}
}
我编写了以下代码来解析它;
NSArray *logs = [[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"];
for (NSDictionary *aLog in logs) {
Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"] withExercises:[aLog objectForKey:@"exercises"]
withWorkouts:[aLog objectForKey:@"workouts"]];
if (!data) {
data = [[NSMutableArray alloc] init];
}
但问题是,有时我会得到像这样的JSON值;
{
"log_by_dates": {
"logs":
{
"date": "Wednesday 5 December 2012",
"exercises": "0",
"workouts": "0",
"log_entries": "0"
}
}
}
这使我的代码崩溃。
请指导我,if()else条件我用来检查传入的JSON对象在解析之前是否包含单个记录,以便我编写适当的代码来处理字典或数组。 谢谢,
答案 0 :(得分:1)
请更新您的代码。
NSArray *logs = [[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"];
if([logs isKindOfClass:[NSArray class]]) {
for (NSDictionary *aLog in logs) {
Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"] withExercises:[aLog objectForKey:@"exercises"]
withWorkouts:[aLog objectForKey:@"workouts"]];
if (!data) {
data = [[NSMutableArray alloc] init];
}
}
}
else if([logs isKindOfClass:[NSDictionary class]]) {
NSDictionary *aLog = (NSDictionary *)logs;
Log *newLog = [[Log alloc] initWithDate:[aLog objectForKey:@"date"] withExercises:[aLog objectForKey:@"exercises"]
withWorkouts:[aLog objectForKey:@"workouts"]];
if (!data) {
data = [[NSMutableArray alloc] init];
}
}
答案 1 :(得分:0)
检查条件如
if([[[(NSDictionary*)results objectForKey:@"log_by_dates"] objectForKey:@"logs"] isKindOfClass:[NSArray class]])
{
// Do your Array Stuff Here
} else {
// Do your Dictionary Stuff Here
}
答案 2 :(得分:0)
在for
循环前插入此内容:
if (![logs isKindOfClass:[NSArray class]])
{
logs = [NSArray arrayWithObject:logs];
}