首页 > 解决方案 > 如何排除指定关键字的结果

问题描述

我想从 json 结果中指定一些关键字并排除结果。(例如,在图像中,我想排除两个名称为 McDonald's 的结果。)我进行了各种搜索,但我不知道该怎么做。

谢谢!

json.results

for i in 0...totalHitCount - 1{
    if json["results"][i]["geometry"]["location"]["lat"] != "" &&
    json["results"][i]["geometry"]["location"]["lng"] != "" &&
    json["results"][i]["name"] != "" {
        let extractedExpr = ShopData(lat: json["results"][i]["geometry"]["location"]["lat"].double,lng:json["results"][i]["geometry"]["location"]["lng"].double,name:json["results"][i]["name"].string)
        print(json["results"][i]["name"].string)
        let shopData = extractedExpr
        self.shopDataArray.append(shopData)
        print(self.shopDataArray.debugDescription)
    }

    else{
        print("")
    }

}

标签: jsonswiftgoogle-places-api

解决方案


要过滤某些名称,创建一个黑名单,内容可以只是名称的一部分,例如

let blackList = ["McDonald", "Kentucky"]

然后过滤

  • lat并且long存在

  • name存在且不为空

  • blacklist不含name

    let results = json["results"].arrayValue
    for result in results {
        let location = result["geometry"]["location"]
        if let lat = location["lat"].double,
            let lng = location["lng"].double,
            let name = result["name"].string, !name.isEmpty,
            !blackList.contains(where: { name.contains($0) }) {
    
            let extractedExpr = ShopData(lat: lat, lng: lng, name: name)
            print(name)
            let shopData = extractedExpr
            self.shopDataArray.append(shopData)
            print(self.shopDataArray.debugDescription)
    
        } else {
            print(result)
        }
    }
    

代码有点,强烈建议您放弃SwiftyJSON支持Codable


推荐阅读