Swift 4中JSON过滤问题:如何通过ID=4获取指定字段值
解决Swift 4中根据id过滤JSON并获取指定字段的问题
嘿,我来帮你搞定这个问题!看起来你卡在JSON解析和数据过滤这两步了,别担心,咱们一步步拆解解决。
第一步:定义正确的Spot结构体(关键是处理带空格的JSON键)
JSON里的"Autre nom"带空格,Swift的属性名不能直接用空格,所以必须通过CodingKeys来做键名映射,确保解析时能正确匹配字段:
import Foundation struct Spot: Codable { let id: Int let autreNom: String // Swift用驼峰命名,对应JSON的"Autre nom" // 必须定义CodingKeys来映射JSON键和Swift属性 enum CodingKeys: String, CodingKey { case id case autreNom = "Autre nom" // 这里明确指定JSON键名 } }
第二步:解析JSON并过滤目标数据
假设你的JSON是一个Spot对象的数组,我们先把JSON数据解析成[Spot]类型,再用first(where:)快速筛选出id=4的元素,最后取出autreNom(也就是JSON里的"Autre nom"):
// 替换成你实际的JSON数据(可以是从网络请求或本地文件获取的Data) let sampleJsonData = """ [ {"id": 1, "Autre nom": "咖啡馆A"}, {"id": 4, "Autre nom": "书店B"}, {"id": 2, "Autre nom": "公园C"} ] """.data(using: .utf8)! do { // 解析JSON为Spot数组 let allSpots = try JSONDecoder().decode([Spot].self, from: sampleJsonData) // 过滤出id等于4的Spot if let targetSpot = allSpots.first(where: { $0.id == 4 }) { print("找到目标字段:\(targetSpot.autreNom)") // 这里会输出"书店B" } else { print("未找到id为4的Spot数据") } } catch { // 捕获解析错误,方便排查问题 print("JSON解析失败:\(error.localizedDescription)") }
几个关键提醒
- 键名大小写敏感:
CodingKeys里的"Autre nom"必须和JSON里的键名完全一致(包括大小写和空格),否则会解析失败。 - 类型匹配:确保结构体里的
id类型和JSON里的id类型一致(比如JSON里是数字就用Int,是字符串就用String)。 - 批量过滤:如果需要所有
id=4的元素(虽然一般id是唯一的),可以用allSpots.filter({ $0.id == 4 })得到一个数组,再遍历处理。
内容的提问来源于stack exchange,提问作者R1'
相关产品推荐
相关产品推荐

