You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤JSON数组?移除url为空的Item元素的实现方法

Swift中过滤API响应里URL为空的Item元素

首先假设你定义的DataDetail及关联的Item结构体大致如下(如果你的结构有差异,只需调整过滤逻辑里的字段访问即可):

struct DataDetail: Codable {
    let items: [Item]
    // 其他业务相关字段...
}

struct Item: Codable {
    let url: String?
    // 其他业务相关字段...
}

实现步骤

  1. 解析API响应为DataDetail实例
    用JSONDecoder将API返回的二进制数据解析成对应的结构体实例:

    // 以异步URLSession请求为例
    func processAPIResponse() async throws {
        guard let apiURL = URL(string: "你的API接口地址") else {
            throw NSError(domain: "InvalidAPIURL", code: -1, userInfo: [NSLocalizedDescriptionKey: "无效的API地址"])
        }
        
        let (responseData, _) = try await URLSession.shared.data(from: apiURL)
        let originalDataDetail = try JSONDecoder().decode(DataDetail.self, from: responseData)
        
        // 执行过滤操作
        let filteredDataDetail = filterItemsWithEmptyURL(from: originalDataDetail)
        
        // 后续使用过滤后的filteredDataDetail
        print("过滤后剩余Item数量: \(filteredDataDetail.items.count)")
    }
    
  2. 实现过滤逻辑
    编写函数过滤掉items数组中url为空(包括nil或空白字符串)的元素,返回新的DataDetail实例:

    func filterItemsWithEmptyURL(from dataDetail: DataDetail) -> DataDetail {
        let filteredItems = dataDetail.items.filter { item in
            // 规则:保留url存在且不为空白字符串的Item
            guard let itemURL = item.url else { return false }
            return !itemURL.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
        }
        // 返回替换了过滤后items的新DataDetail
        return DataDetail(items: filteredItems)
    }
    

自定义过滤规则说明

  • 如果你的Item中url是非可选类型(String而非String?),可以简化过滤逻辑:
    let filteredItems = dataDetail.items.filter {
        !$0.url.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
    }
    
  • 若只需排除url为nil的情况,无需处理空白字符串,去掉trimmingCharacters相关代码即可。

内容的提问来源于stack exchange,提问作者Ky Gia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:52:09