我需要过滤一个多嵌套的json,它基本上是一个包含key值的字典数组,也是数组
这是一个示例
{//Upper structure, an nsaaray of responses
Items = (
{
descriptionRating = "some";
category = 20;
}
);
dynamicVales = (
{
text = "name";
value = "falafel";
type = 3;
},
{
text = "name";
value = (
turkeysandwich,
burger,
snickers
);
type = 2;
},
{
text = "name";
value = "whatever";
type = 2;
},
);
},
所以我有一个响应的nsarray,每个响应在这种情况下都有一个nsarray的nsarray称为“dynamicVales”,这可以包含一个字符串或一个字符串数组,我需要过滤所有的响应,其中dynamicVales中的值为=一个字符串我有一个值。该字符串等于数组
NSString *selectedString = @"turkeysandwich, burger, snickers";
我试过这个
[filteredresponses = self.responses filteredArrayUsingPredicate:[NSString
stringWithFormat:@"dynamicVales.value CONTAINS '%@'", selectedString];
显然这不起作用,有没有办法在一个谓词中执行此操作,而不是循环遍历这些内部数组?
value = (
turkeysandwich,
burger,
snickers
);
总而言之,我需要过滤掉字符串的全部内容,使其与Value中的NSArray的所有内容相等。
答案 0 :(得分:4)
对于您的问题,请尝试以下代码。
NSString *predicateString = [NSString stringWithFormat:@"ANY dynamicVales.value == 'chicken'"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
NSArray *filteredResults = [Mainarray filteredArrayUsingPredicate:predicate];
你可以看到Predicate the arrays或Dictionaries的更多语法,你可以从下面的链接中学到很多东西:
快乐的编码!
答案 1 :(得分:0)
您可以使用predicateWithBlock方法创建谓词。在块内,检查dynamicVale是否包含要搜索的值。
代码:
NSArray *yourArray = ....;
NSString *searchText = ...;
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSDictionary * _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
NSArray *dynamicVales = [evaluatedObject valueForKeyPath: @"dynamicVales.value"];
return [dynamicVales containsObject:searchText];
}];
NSArray *filteredArray = [yourArray filteredArrayUsingPredicate:predicate];