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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:31:55