iOS NSPredicate与嵌套的JSON数组

时间:2014-12-15 12:53:59

标签: ios objective-c json nspredicate

考虑以下JSON对象:

[
  {
  "name":"joe",
  "place":"here",
  "type":[
     "abc",
     "cde",
     "efg"
     ]
  },
  {
  "name":"ian",
  "place":"somewhere",
  "type":[
     "c",
     "ddd",
     "eee"
     ]
  },
  {
  "name":"mike",
  "place":"there",
  "type":[
     "any",
     "place",
     "nice"
     ]
  },
]

如何在Objective-C中创建一个谓词来查询不同"类型的值#34;基于

的对象和过滤器

由于

2 个答案:

答案 0 :(得分:2)

使用块创建谓词,并在块内创建比较函数。

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary * bindings) {
  if([[evaluatedObject objectForKey:@"name"] isEqual:@"SomeString]) {
     return YES;
  } else {
     return NO;
  }
}

这个简单的第一级比较,但你明白了。从这个对象你可以更深入,并返回YES / NO,你可以确定比较结果。

答案 1 :(得分:2)

如果您的数据位于名为jsonArray的NSArray中,则可以使用以下内容过滤类型:

NSString *typeToSelect = @"abc";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY type like %@",typeToSelect];
NSArray *filteredArray = [jsonArray filteredArrayUsingPredicate:predicate];