Reputation: 885
I have the following resonse array. Please help me to filter the array of type "Private"
leagues = (
{
id = 23;
member = 1;
name = DelphiFC;
password = "<null>";
type = Public;
username = cyriljose;
},
{
id = 24;
member = 1;
name = FascoBreFC;
password = "<null>";
type = Public;
username = cyriljose;
},
{
id = 25;
member = 1;
name = HingeSpotFC;
password = "<null>";
type = Public;
username = cyriljose;
},
{
id = 22;
member = 1;
name = popilatorFC;
password = 25369852;
type = Private;
username = cyriljose;
},
{
id = 21;
member = 1;
name = trojanFC;
password = 12354687;
type = Private;
username = cyriljose;
}
);
I mean i should get an array which contains the league names of type "Private". Whether i should use NSPredicate and if yes how?? Please help
Upvotes: 1
Views: 200
Reputation:
Oh well my impression was that you were looking to parse a JSON file with that data. If so, this could work:
-(void)parseJSONFile {
NSData *jsonData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"JSON FILE URL HERE..."]];
NSError *error;
NSMutableDictionary *parsedData = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if ((error == nil) && (parsedData != nil)) {
// Get the data you need.
NSArray *data_id = [[parsedData objectForKey:@"leagues"] valueForKey:@"id"];
NSArray *data_member = [[parsedData objectForKey:@"leagues"] valueForKey:@"member"];
NSArray *data_name = [[parsedData objectForKey:@"leagues"] valueForKey:@"name"];
NSArray *data_password = [[parsedData objectForKey:@"leagues"] valueForKey:@"password"];
NSArray *data_type = [[parsedData objectForKey:@"leagues"] valueForKey:@"type"];
NSArray *data_username = [[parsedData objectForKey:@"leagues"] valueForKey:@"username"];
// Only store the data for items in the array which
// have their "type" property set to "Private".
NSMutableArray *private_data = [[NSMutableArray alloc] init];
for (int loop = 0; loop < [data_type count]; loop++) {
if ([[private_data objectAtIndex:loop] isEqualToString:@"Private"]) {
NSArray *info_block = @[[data_id[loop] description], [data_member[loop] description], [data_name[loop] description], [data_password[loop] description], [data_type[loop] description], [data_username[loop] description]];
[private_data addObject:info_block];
}
}
// Now you have parsed the private only objects.
NSLog(@"%@", private_data);
}
else {
// Error - no data has been downloaded.
NSLog(@"Error: %@", error);
}
}
Upvotes: 2
Reputation: 1220
Try using NSPredicate
NSArray *data = [NSArray arrayWithObject:[NSMutableDictionary dictionaryWithObject:@"Private" forKey:@"type"]];
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(type == %@)", @"Private"]];
Upvotes: 1
Reputation: 16864
Following is the whole example to showing those data which type
is Private
.
NSArray *arLeagues = @[@{
@"id":@23,
@"member":@1,
@"name":@"DelphiFC",
@"password":@"<null>",
@"type":@"Public",
@"username":@"cyriljose",
},
@{
@"id":@24,
@"member":@1,
@"name":@"FascoBreFC",
@"password":@"<null>",
@"type":@"Public",
@"username":@"cyriljose",
},
@{
@"id":@25,
@"member":@1,
@"name":@"<null>",
@"password":@"12354687",
@"type":@"Public",
@"username":@"cyriljose",
},
@{
@"id":@22,
@"member":@1,
@"name":@"popilatorFC",
@"password":@"25369852",
@"type":@"Private",
@"username":@"cyriljose",
},
@{
@"id":@21,
@"member":@1,
@"name":@"trojanFC",
@"password":@"12354687",
@"type":@"Private",
@"username":@"cyriljose",
}
];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"type contains[cd] %@", @"Private"];
NSArray *matchingDicts = [arLeagues filteredArrayUsingPredicate:predicate];
NSLog(@"%@",matchingDicts);
And output is
(
{
id = 22;
member = 1;
name = popilatorFC;
password = 25369852;
type = Private;
username = cyriljose;
},
{
id = 21;
member = 1;
name = trojanFC;
password = 12354687;
type = Private;
username = cyriljose;
}
)
Upvotes: 3