如何过滤JSON数组?移除url为空的Item元素的实现方法
Swift中过滤API响应里URL为空的Item元素
首先假设你定义的DataDetail及关联的Item结构体大致如下(如果你的结构有差异,只需调整过滤逻辑里的字段访问即可):
struct DataDetail: Codable { let items: [Item] // 其他业务相关字段... } struct Item: Codable { let url: String? // 其他业务相关字段... }
实现步骤
解析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)") }实现过滤逻辑
编写函数过滤掉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
相关产品推荐
相关产品推荐

