Objective c 如果json数据等于nil,如何删除?

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

如果parent_id=“”,则必须删除其他值

我将值name和parent\u id存储在此处

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;