Ios 从JSON输出中提取JSON对象
这是我的JSON输出Ios 从JSON输出中提取JSON对象,ios,xcode,json,Ios,Xcode,Json,这是我的JSON输出 {"activitiesList":{"auid":"19UG9IZ","comments":"Please enter Description","createDate":"09/19/2012 07:32:56 AM","id":"19UG9IZ","owner":"04256CRM","response":"Missing Response","status":"Assigned","type":"Request Action"}} 当我有多个activitiesL
{"activitiesList":{"auid":"19UG9IZ","comments":"Please enter Description","createDate":"09/19/2012 07:32:56 AM","id":"19UG9IZ","owner":"04256CRM","response":"Missing Response","status":"Assigned","type":"Request Action"}}
当我有多个activitiesList时,下面的代码可以工作,而不是上面的输出,它只有一个activitiesList
@try {
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSArray* activityListFromSiebel = [json objectForKey:@"activitiesList"]; //2
NSLog(@" Count is %d", [activityListFromSiebel count]);
for (int i = 0; i < [activityListFromSiebel count]; i++) {
//if ([activityListFromSiebel count] > 1) {
NSDictionary* completeActivity = [activityListFromSiebel objectAtIndex:i];
ObjActivityData *dataActivity = [[ObjActivityData alloc] init];
dataActivity.activityUID = [completeActivity objectForKey:@"auid"];
dataActivity.activitytype = [completeActivity objectForKey:@"type"];
dataActivity.activityStatus = [completeActivity objectForKey:@"status"];
dataActivity.activityOpenedDt = [completeActivity objectForKey:@"createDate"];
dataActivity.activityDueDt = @"";
dataActivity.activityDesc = [completeActivity objectForKey:@"comments"];
dataActivity.activityResponse = [completeActivity objectForKey:@"response"];
[Activities addObject:dataActivity];
dataActivity = nil;
//}
}
[self.tableView reloadData];
} @catch (NSException * e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
} @finally {
NSLog(@"finally");
}
@试试看{
n错误*错误;
NSDictionary*json=[NSJSONSerialization JSONObject WithData:responseData选项:针织错误:&错误];
NSArray*activityListFromSiebel=[json objectForKey:@“activitiesList”];//2
NSLog(@“计数为%d,[activityListFromSiebel计数]);
对于(int i=0;i<[activityListFromSiebel count];i++){
//如果([activityListFromSiebel count]>1){
NSDictionary*completeActivity=[activityListFromSiebel对象索引:i];
ObjActivityData*dataActivity=[[ObjActivityData alloc]init];
dataActivity.activityUID=[completeActivity objectForKey:@“auid”];
dataActivity.activitytype=[completeActivity objectForKey:@“类型”];
dataActivity.activityStatus=[completeActivity objectForKey:@“状态”];
dataActivity.ActivityOpenEdtt=[completeActivity objectForKey:@“createDate”];
dataActivity.activityDueDt=@”;
dataActivity.activityDesc=[completeActivity objectForKey:@“comments”];
dataActivity.activityResponse=[completeActivity objectForKey:@“响应”];
[Activities addObject:dataActivity];
数据活动=零;
//}
}
[self.tableView重载数据];
}@catch(n例外*e){
NSLog(@“捕获%@reason%@,[e name],[e reason]);
}@终于{
NSLog(@“最终”);
}
抛出的try/catch错误是NSInvalidArgumentException原因-[\uu nsFarray length]:发送到实例0x68c8e90的无法识别的选择器。
如果JSON输出仅为1个数组元素,那么我应该以不同的方式解析JSON输出吗。感谢你的帮助
谢谢你这么做
id obj = [json objectForKey:@"activitiesList"];
NSArray* activityListFromSiebel = nil;
if ([obj isKindOfClass:[NSArray class]]) {
activityListFromSiebel = (NSArray *)obj;
} else {
activityListFromSiebel = [NSArray arrayWithObject:obj];
}
问题是,当您试图使用代码时,您假设[json objectForKey:@“activitiesList]”
是一个数组,但实际上它只是一个字典,只有一个条目存在。您可以通过传递for循环并将字典转换为else部分中的ObjActivityData
对象,也可以将其作为快速修复添加到您现在使用的for循环之前
因此,您的代码将如下所示
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
id obj = [json objectForKey:@"activitiesList"];
NSArray* activityListFromSiebel = nil;
if ([obj isKindOfClass:[NSArray class]]) {
activityListFromSiebel = (NSArray *)obj;
} else {
activityListFromSiebel = [NSArray arrayWithObject:obj];
}
NSLog(@" Count is %d", [activityListFromSiebel count]);
for (int i = 0; i < [activityListFromSiebel count]; i++) {
//if ([activityListFromSiebel count] > 1) {
NSDictionary* completeActivity = [activityListFromSiebel objectAtIndex:i];
ObjActivityData *dataActivity = [[ObjActivityData alloc] init];
dataActivity.activityUID = [completeActivity objectForKey:@"auid"];
dataActivity.activitytype = [completeActivity objectForKey:@"type"];
dataActivity.activityStatus = [completeActivity objectForKey:@"status"];
dataActivity.activityOpenedDt = [completeActivity objectForKey:@"createDate"];
dataActivity.activityDueDt = @"";
dataActivity.activityDesc = [completeActivity objectForKey:@"comments"];
dataActivity.activityResponse = [completeActivity objectForKey:@"response"];
[Activities addObject:dataActivity];
dataActivity = nil;
//}
}
[self.tableView reloadData];
NSError*错误;
NSDictionary*json=[NSJSONSerialization JSONObject WithData:responseData选项:针织错误:&错误];
id obj=[json objectForKey:@“活动列表”];
NSArray*activityListFromSiebel=nil;
if([obj是kindof类:[NSArray类]]){
activityListFromSiebel=(NSArray*)obj;
}否则{
activityListFromSiebel=[NSArray arrayWithObject:obj];
}
NSLog(@“计数为%d,[activityListFromSiebel计数]);
对于(int i=0;i<[activityListFromSiebel count];i++){
//如果([activityListFromSiebel count]>1){
NSDictionary*completeActivity=[activityListFromSiebel对象索引:i];
ObjActivityData*dataActivity=[[ObjActivityData alloc]init];
dataActivity.activityUID=[completeActivity objectForKey:@“auid”];
dataActivity.activitytype=[completeActivity objectForKey:@“类型”];
dataActivity.activityStatus=[completeActivity objectForKey:@“状态”];
dataActivity.ActivityOpenEdtt=[completeActivity objectForKey:@“createDate”];
dataActivity.activityDueDt=@”;
dataActivity.activityDesc=[completeActivity objectForKey:@“comments”];
dataActivity.activityResponse=[completeActivity objectForKey:@“响应”];
[Activities addObject:dataActivity];
数据活动=零;
//}
}
[self.tableView重载数据];
@user1509593,很乐意帮忙。:)