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

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'

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:23:18