在 SwiftyJson 中过滤数据
Filter Data in SwiftyJson
我有一个 SwiftyJson 对象。
我无法过滤那个数组。我试过这个解决方案 。但是我的 json 格式不同,所以无法正常工作。
[
{
"name": "19860",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "lunch"
},
"alerts": "1",
"venue": {
"location": "Delhi, India",
"timezone": "+05:30"
},
"srs_category": [
0,
1
]
},
{
"name": "19861",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "Dinner"
},
"alerts": "1",
"venue": {
"location": "Mumbai, India",
"timezone": "+05:30"
},
"srs_category": [
1,
3
]
},
{
"name": "19862",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "lunch"
},
"alerts": "1",
"venue": {
"location": "Surat, India",
"timezone": "+05:30"
},
"srs_category": [
0,
2
]
}
]
我想找到 srs_category 包含 1 的对象。我知道可以通过循环和条件来实现。但我想通过 NSPredicate。如果可以,请帮助我。
谢谢。
使用 Swift 本机函数而不是 NSPredicate
data
表示从某处
收到的Data
对象
do {
if let json = try JSONSerialization.jsonObject(with:data) as? [[String:Any]] {
let srsCategory1 = json.first(where: { dict -> Bool in
guard let array = dict["srs_category"] as? [Int] else { return false }
return array.contains(1)
})
print(srsCategory1 ?? "not found")
}
} catch {
print(error)
}
如果有多个项目符合条件,将first
替换为filter
。那么结果就是一个non-optional数组。
这里是使用 SwiftyJSON 的简单方法:
let filtered = JSON(yourArray).arrayValue.filter({
[=10=]["srs_category"].arrayValue.map({ [=10=].intValue }).contains(1)
})
我有一个 SwiftyJson 对象。
我无法过滤那个数组。我试过这个解决方案
[
{
"name": "19860",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "lunch"
},
"alerts": "1",
"venue": {
"location": "Delhi, India",
"timezone": "+05:30"
},
"srs_category": [
0,
1
]
},
{
"name": "19861",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "Dinner"
},
"alerts": "1",
"venue": {
"location": "Mumbai, India",
"timezone": "+05:30"
},
"srs_category": [
1,
3
]
},
{
"name": "19862",
"header": {
"start_time": "1519270200",
"end_time": "1519299000",
"state": "lunch"
},
"alerts": "1",
"venue": {
"location": "Surat, India",
"timezone": "+05:30"
},
"srs_category": [
0,
2
]
}
]
我想找到 srs_category 包含 1 的对象。我知道可以通过循环和条件来实现。但我想通过 NSPredicate。如果可以,请帮助我。
谢谢。
使用 Swift 本机函数而不是 NSPredicate
data
表示从某处
Data
对象
do {
if let json = try JSONSerialization.jsonObject(with:data) as? [[String:Any]] {
let srsCategory1 = json.first(where: { dict -> Bool in
guard let array = dict["srs_category"] as? [Int] else { return false }
return array.contains(1)
})
print(srsCategory1 ?? "not found")
}
} catch {
print(error)
}
如果有多个项目符合条件,将first
替换为filter
。那么结果就是一个non-optional数组。
这里是使用 SwiftyJSON 的简单方法:
let filtered = JSON(yourArray).arrayValue.filter({
[=10=]["srs_category"].arrayValue.map({ [=10=].intValue }).contains(1)
})