Objective c 如果json数据等于nil,如何删除?
如果parent_id=“”,则必须删除其他值 我将值name和parent\u id存储在此处Objective c 如果json数据等于nil,如何删除?,objective-c,nsarray,nsjsonserialization,Objective C,Nsarray,Nsjsonserialization,如果parent_id=“”,则必须删除其他值 我将值name和parent\u id存储在此处 category = ( { "category_id" = 18; column = 1; description = "Electrician Works"; image = "images/Electrician.jpg"; "meta
category = (
{
"category_id" = 18;
column = 1;
description = "Electrician Works";
image = "images/Electrician.jpg";
"meta_description" = "Electrician Works";
"meta_keyword" = "Electrician Works";
name = Electrician;
"parent_id" = "";
"sort_order" = 3;
status = enable;
subcategory = (
);
top = "";
},
{
"category_id" = 19;
column = 1;
description = "Plumbing Works";
image = "images/Plumber.png";
"meta_description" = "Plumbing Works";
"meta_keyword" = "Plumbing Works";
name = Plumber;
"parent_id" = "";
"sort_order" = 1;
status = disable;
subcategory = (
);
top = "";
},
{
"category_id" = 37;
column = 0;
description = "";
image = "images/SUV.jpg";
"meta_description" = "";
"meta_keyword" = "";
name = SUV;
"parent_id" = 20;
"sort_order" = 3;
status = enable;
subcategory = (
);
top = "";
}
若父id不在那个里,那个么我必须从数组中删除,任何人都可以帮助我找出这个问题
{
name = Microwave;
parent = "";
},
{
name = Hatchback;
parent = 20;
},
{
name = Sedan;
parent = 20;
},
{
name = SUV;
parent = 20;
}
这是我的密码
-(void)responseFunction:(NSMutableDictionary*)response
{
BOOL sucess;
sucess =[response objectForKey:@"sucess"];
if(!sucess)
{
NSLog(@"%@",response);
arrDicCategory=[response objectForKey:@"category"];
for(NSDictionary *dicAllCategory in arrDicCategory)
{
NSMutableDictionary *dicStorage=[[NSMutableDictionary alloc]init];
[dicStorage setObject:[[dicAllCategory objectForKey:@"name"] length] !=0?[dicAllCategory objectForKey:@"name"]:@"" forKey:@"name"];
// [dicStorage setObject:[dicAllCategory objectForKey:@"parent_id"]!=Nil?[dicAllCategory objectForKey:@"parent"]:@"" forKey:@"parentid"];
[dicStorage setObject:[dicAllCategory objectForKey:@"parent_id"] forKey:@"parent"];
[arrDicName addObject:dicStorage];
NSLog(@"%@",arrDicName);
}
}
}
我正在尝试使用以下代码删除这些值:
I NEED OUTPUT LIKE THIS
name = Hatchback;
parent = 20;
name = Sedan;
parent = 20;
name = SUV;
parent = 20;
for(inti=0;i尝试下面的代码。我已经根据您的要求创建了一个虚拟字典和数组
for(int i=0; i<arrDicName.count ; i++)
{
if([[arrDicName objectAtIndex:i]objectForKey:@"parent"]==Nil)
{
[arrDicName removeObject:[[arrDicName objectAtIndex:i]objectForKey:@"parent"]];
NSLog(@"AfterRemovingFromThearray%@",arrDicName);
}
}
希望能有帮助。如果不能解决你的问题,请告诉我
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"" forKey:@"parent_id"];
[dict setObject:@"abc" forKey:@"name"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];
[dict1 setObject:@"1" forKey:@"parent_id"];
[dict1 setObject:@"abcq" forKey:@"name"];
NSMutableDictionary *dict2 = [[NSMutableDictionary alloc] init];
[dict2 setObject:@"" forKey:@"parent_id"];
[dict2 setObject:@"sss" forKey:@"name"];
NSMutableDictionary *dict3 = [[NSMutableDictionary alloc] init];
[dict3 setObject:@"2" forKey:@"parent_id"];
[dict3 setObject:@"ddd" forKey:@"name"];
arrTemp = [[NSMutableArray alloc] init];
[arrTemp addObject:dict];[arrTemp addObject:dict1];[arrTemp addObject:dict2];[arrTemp addObject:dict3];
NSMutableIndexSet *indexesToDelete = [NSMutableIndexSet indexSet];
NSUInteger currentIndex = 0;
for (id obj in arrTemp) {
if([[obj objectForKey:@"parent_id"] isEqualToString:@""]){
[indexesToDelete addIndex:currentIndex];
}
currentIndex++;
}
[arrTemp removeObjectsAtIndexes:indexesToDelete];
NSLog(@"%@", arrTemp);
遵循下面的代码
- (BOOL)isEmptyString:(NSString *)yourParentID
{
BOOL isEmp = NO;
if([[yourParentID stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0)
{
isEmp = YES;
}
else
{
isEmp = NO;
}
return isEmp;
}
希望这能帮助您您的代码片段有几个问题:
您正在针对Nil
测试“parent”
键。该键永远不会是Nil
,因为它们在Objective-C集合类中是不允许的。请改为测试length>0
您正在从正在枚举的数组中删除对象,从而有效地更改了数组的长度。这将导致索引越界异常或缺少元素等问题
最好的方法是创建一个新数组并复制通过测试的元素:
NSString *parentId = [NSString stringWithFormat:@"%@",[[arrDicName objectAtIndex:i]objectForKey:@"parent"]];
if([self isEmptyString:parentId])
{
// Parent id is nil
// Do the rest
}
else
{
// Parent id is not nil
}
为什么是一个字典数组,而一个字典就可以(更快地查找)?在for循环内部,我正在存储值…..在for
循环内部,您是否有理由不将您的条件包含在if
中,并采取适当的措施?因为我的json数据中有多个值,这只是我在放置循环并将值存储在另一个字典中….@CRDYou想要删除吗类别响应中的值或您给出的第二个数组中的值?为什么setValue
而不是setObject
?@trojanfoe-是的,您是对的,setObject将更通用。将更正它。@z22 bro此工作已暂停,请等待两天,我将接受答案
NSMutableArray filteredArray = [NSMutableArray new];
for (NSDictionary *dict in arrDicName)
{
NSString *parent = dict[@"parent"];
if (parent.length > 0)
[filteredArray addObject:dict];
}
arrDicName = filteredArray;