【问题标题】:filtering JSON stings array with NSPredicate and regular expression使用 NSPredicate 和正则表达式过滤 JSON 字符串数组
【发布时间】:2016-07-25 03:22:24
【问题描述】:

我有一个包含JSON 字符串的NSArray,如下所示。

[  
   {  
      "title":"find good book",
      "isCompleted":true
   },
   {  
      "title":"complete work",
      "isCompleted":false
   },
   {  
      "title":"check schedule",
      "isCompleted":false
   }
]

我想在“title”键下找到具有“plet”值的对象的索引。当我只是简单地在NSPredicate 下方使用时,它会返回每个对象,因为每个JSON 对象都以“isCompleted”作为键。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", @"plet"];

我不想将 JSON 转换为 NSDictionary 对象。而且我不使用[NSPredicate predicateWithBlock:],因为我要将此谓词应用于NSFetchedResultsController。根据文档,由[NSPredicate predicateWithBlock:]创建的NSPredicate不能用于NSFetchedResultsController。

所以我的问题是,我可以使用正则表达式来解决这个问题吗?我对正则表达式了解不多。谁能举个例子吗?

【问题讨论】:

  • 为什么不将它们转换成合适的对象,然后将对象保存到CoreData中,之后就可以直接使用带有属性的谓词了?

标签: objective-c json nspredicate nsregularexpression


【解决方案1】:

您可以使用 predicateWithBlock 方法来创建您的谓词。在 block 内部,检查 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];

复制自 JhonyKutties 的回答。享受编码:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    相关资源
    最近更新 更多