如何根据 JSON 中的另一个字典键过滤字典值?
How to filter dictionary values based on another dictionary key from a JSON?
我有一个 table 和一个搜索它的 UISearchController。第一个 table 由 JSON 填充,格式为:
{
"items":
[
{
"title":"title1",
"url":"url1",
},
{
"title":"title2",
"url":"url2",
}
]
}
"title" 显示为单元格的文本标签,url 是单击单元格时打开的 link。
当我在搜索栏中搜索时,结果 table 显示由符合搜索条件的标题填充。我的问题是这些不包括 url,因此单击这些单元格时没有任何反应。我的搜索条件如下:
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
// filter the search results
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [cd] %@", self.searchController.searchBar.text];
self.results = [[self.JSONarray valueForKey:@"title"] filteredArrayUsingPredicate:predicate];
[self.tableView reloadData];
}
我能看出我认为的问题所在,但无法弄清楚如何解决它。搜索时,它只是搜索标题并用这些填充结果数组,但我需要 urls 来根据相应的标题进行过滤。
任何帮助将不胜感激。
由于我没有您的所有代码,所以我正在打字,但请尝试以下操作:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title contains [cd] %@", self.searchController.searchBar.text];
self.results = [self.JSONarray filteredArrayUsingPredicate:predicate];
不同之处在于我们不首先过滤 JSON 数组的 title
个元素;相反,我们正在搜索整个数组,并在谓词中使用 title
。
这样做之后,self.results
应该是 NSDictionary
的 NSArray
,每个包含一个 title
和 url
元素。因此,您可以根据需要访问 URL 以检索结果。
我有一个 table 和一个搜索它的 UISearchController。第一个 table 由 JSON 填充,格式为:
{
"items":
[
{
"title":"title1",
"url":"url1",
},
{
"title":"title2",
"url":"url2",
}
]
}
"title" 显示为单元格的文本标签,url 是单击单元格时打开的 link。
当我在搜索栏中搜索时,结果 table 显示由符合搜索条件的标题填充。我的问题是这些不包括 url,因此单击这些单元格时没有任何反应。我的搜索条件如下:
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
// filter the search results
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [cd] %@", self.searchController.searchBar.text];
self.results = [[self.JSONarray valueForKey:@"title"] filteredArrayUsingPredicate:predicate];
[self.tableView reloadData];
}
我能看出我认为的问题所在,但无法弄清楚如何解决它。搜索时,它只是搜索标题并用这些填充结果数组,但我需要 urls 来根据相应的标题进行过滤。
任何帮助将不胜感激。
由于我没有您的所有代码,所以我正在打字,但请尝试以下操作:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title contains [cd] %@", self.searchController.searchBar.text];
self.results = [self.JSONarray filteredArrayUsingPredicate:predicate];
不同之处在于我们不首先过滤 JSON 数组的 title
个元素;相反,我们正在搜索整个数组,并在谓词中使用 title
。
这样做之后,self.results
应该是 NSDictionary
的 NSArray
,每个包含一个 title
和 url
元素。因此,您可以根据需要访问 URL 以检索结果。