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

SwiftUI从WordPress API取数:无法访问og_image的url字段

解决SwiftUI解析WordPress API中yoast_head_json.og_image.url的问题

问题根源

  1. 错误的解码器配置:你在loadData中设置了decoder.dataDecodingStrategy = .base64,这完全没必要——API返回的是标准JSON格式,不是Base64编码的数据,这个设置会导致解码失败,进而无法正确解析yoast_head_json中的字段。
  2. 数组访问方式错误:og_image是数组类型,你不能直接把整个数组传给Text,需要访问数组中的元素(比如第一个元素)的url属性,同时要处理可选值(数组可能为空)。

修正步骤

1. 修复解码器配置

在loadData函数中删除错误的解码器配置,同时改用do-catch捕获解码错误,方便排查问题:

func loadData() {
    guard let url = URL(string: "https://xboxdynasty.de/wp-json/wp/v2/posts/") else {
        print("Invalid URL")
        return
    }
    let request = URLRequest(url: url)
    URLSession.shared.dataTask(with: request) {data, response, error in
        if let data = data {
            let decoder = JSONDecoder()
            
            do {
                let decodedResponse = try decoder.decode([UpcomingGames].self, from: data)
                DispatchQueue.main.async {
                    self.upcominggames = decodedResponse
                }
            } catch {
                print("解码失败:\(error.localizedDescription)")
            }
            return
        }
        print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
    }.resume()
}

2. 优化结构体(可选但推荐)

为了避免因API返回字段缺失导致解码失败,建议将结构体中可能为空的字段设为可选类型:

struct Title: Codable {
    let title: String?
    let description: String?
    let author: String?
    let ogimage: [OgImage]?
    
    enum CodingKeys: String, CodingKey {
        case title
        case description
        case author
        case ogimage = "og_image"
    }
}

struct OgImage: Codable {
    let width, height: Int?
    let url: String?
    let type: String?
}

3. 正确访问og_image的url

在ContentView中,通过可选链安全访问数组元素的url,并处理空值情况:

// 替换你注释掉的代码,示例放在HStack中
if let firstImage = item.yoastHeadJSON.ogimage?.first, let imageUrl = firstImage.url {
    Text(imageUrl)
        .font(.caption)
} else {
    Text("无图片")
        .font(.caption)
}

验证效果

修改后重新运行,应该能正确解析og_image的url字段。如果仍有问题,可以通过do-catch打印的错误信息,定位具体不匹配的字段。

内容的提问来源于stack exchange,提问作者Patrick Egger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:20:53