在 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)
    })