Swift解析嵌套JSON:获取logo-original-url遇语法错误求助
嘿,我帮你搞定这个Swift解析嵌套JSON的问题!你说的logo-original-url字段拿不到,大概率是Logo相关的结构体没和JSON的层级对应上。先补个包含logo字段的完整JSON示例(毕竟你给的原JSON里没这部分,我按常见的嵌套逻辑补全,方便你对照):
{
"pagination": {
"page_number": 1,
"page_size": 50,
"continuation": "eyJwYWdlIjogMn0",
"has_more_items": true
},
"events": [
{
"name": {
"text": "Atelier femmes ..."
},
"logo": {
"original": {
"url": "https://example.com/brand-logo.png"
}
}
}
]
}
第一步:严格匹配层级定义结构体
你需要用Codable协议,完全对应JSON的嵌套层次来写Swift结构体,重点看Logo相关的部分:
// 顶层响应结构体 struct EventResponse: Codable { let pagination: Pagination let events: [Event] } // 分页信息结构体(处理下划线命名的JSON键) struct Pagination: Codable { let pageNumber: Int let pageSize: Int let continuation: String let hasMoreItems: Bool enum CodingKeys: String, CodingKey { case pageNumber = "page_number" case pageSize = "page_size" case continuation case hasMoreItems = "has_more_items" } } // 单个事件结构体 struct Event: Codable { let name: Name let logo: Logo? // 加?避免logo字段缺失时解析崩溃 } // 事件名称结构体 struct Name: Codable { let text: String } // 核心:Logo结构体(对应JSON里的logo层级) struct Logo: Codable { let original: OriginalLogo } // OriginalLogo结构体(对应logo下的original字段) struct OriginalLogo: Codable { // 如果你的JSON字段确实是"logo-original-url",就用下面的CodingKey映射 // let url: String // enum CodingKeys: String, CodingKey { // case url = "logo-original-url" // } // 如果是普通的"url"字段,直接写就行 let url: String }
第二步:解析JSON并获取目标字段
假设你已经拿到了JSON的Data数据(比如网络请求返回的结果),解析代码如下:
do { let decoder = JSONDecoder() let response = try decoder.decode(EventResponse.self, from: yourJsonData) // 取出第一个事件的logo原始url if let firstEvent = response.events.first, let originalLogo = firstEvent.logo?.original { print("成功拿到Logo URL:\(originalLogo.url)") } else { print("当前事件没有logo数据") } } catch { print("解析出错:\(error.localizedDescription)") }
常见坑点排查
- 如果你的JSON里
original字段是直接的字符串(不是字典),那Logo结构体要改成let original: String,不用再嵌套OriginalLogo结构体 - 一定要保证JSON的键和Swift的
CodingKey完全匹配,大小写、下划线一个都不能错,这是最容易踩的坑 - 不确定字段是否存在时,给结构体属性加
?设为可选类型,避免解析崩溃
内容的提问来源于stack exchange,提问作者Coding while Loading
相关产品推荐
相关产品推荐

