ios - 根据json中的值进行搜索
问题描述
我的 coredata 模型中有一个属性,我name
可以在此基础上进行搜索...
filtered = self.newProdDetails.filter({( data : NewProduct) -> Bool in
return (data.name!.lowercased().contains(searchText.lowercased()))
})
现在我可以在我想根据名称搜索时加载filtered
数组。cellForRowAt..
但是对于另一种观点,还有另一个实体具有一个名为 的属性customerJson
。这个jsoncustomerName
里面有我想要搜索的基础。
在我首先提到的场景中,我要搜索的元素(name
)直接是一个属性。但在第二种情况下,我要搜索的元素在 json 中。所以在这种情况下,我怎样才能为数组赋值filtered
......?
我做过这样的事情......
for element in orderDetails {
if let jsonStr = element.value(forKey: "customerJson") as? String {
let data = jsonStr.data(using: String.Encoding.utf8, allowLossyConversion: false)!
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any] {
for item in json {
if item.key == "first_name" {
var customerName = (item.value as? String)! //HERE I GET THE CUSTOMER NAME. BUT HOW CAN I ASSIGN IT TO 'filtered' ARRAY FOR THE PURPOSE OF SEARCHING, I CAN'T FIGURE OUT.
}
}
}
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
}
}
解决方案
简单地说,这必须在内部完成if item.key == "first_name"
并且它起作用了......
filterArr = self.orderDetails.filter({( data : Order) -> Bool in
return (data.customerJson!.lowercased().contains(searchText.lowercased()))
})
推荐阅读
- ios - 如何对 App Store 提交的 Carthage 框架进行代码签名?
- dart - Flutter 在获取数据时抛出错误。我该如何解决?
- javascript - 为什么在我打开检查工具之前我的图像不会加载到 carousal 中?
- spring - http 404 错误源服务器没有找到目标资源的当前表示或不愿意透露存在的表示
- recursion - makefile递归所有子系统总是最新的
- python - 将大型 python 文件拆分为较小的文件
- c# - EF Core 修改实体状态的行为如何?
- ios - Alamofire POST 请求,正文中有一个简单的字符串作为参数,标头仍然显示缺少参数值
- cesium - Cesium:我可以用图像覆盖地形,然后在其上添加slopeRamp 材质吗?
- angular - 材料表格的材料表(使用材料滑块)不起作用