微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JSON无法使用Codable解析

如何解决JSON无法使用Codable解析

我正在尝试解析此json字符串:

let jsonString  = """
{
  "items": [
    {
      "snippet": {
        "publishedAt": "2020-05-20T16:00:23Z","title": "Lesson 2 - One Day Build","description": "Description for Lesson 2","thumbnails": {
          "high": {
            "url": "https://i.ytimg.com/vi/PvvwZW-dRwg/sddefault.jpg","width": 640,"height": 480
          },"maxres": {
            "url": "https://i.ytimg.com/vi/PvvwZW-dRwg/maxresdefault.jpg","width": 1280,"height": 720
          }
        },"resourceId": {
          "videoId": "PvvwZW-dRwg"
        }
      }
    },{
      "snippet": {
        "publishedAt": "2020-05-26T16:00:23Z","title": "Lesson 3 - One Day Build","description": "Description for Lesson 3","thumbnails": {
          "high": {
            "url": "https://i.ytimg.com/vi/m3XbTkMZMPE/sddefault.jpg","maxres": {
            "url": "https://i.ytimg.com/vi/m3XbTkMZMPE/maxresdefault.jpg","resourceId": {
          "videoId": "m3XbTkMZMPE"
        }
      }
    }
  ]
}
"""

我已经从QuickType创建了以下结构:

// MARK: - Welcome
struct Welcome: Codable {
    let items: Item
}

// MARK: - Item
struct Item: Codable {
    let snippet: Snippet
}

// MARK: - Snippet
struct Snippet: Codable {
    let publishedAt: Date
    let title,snippetDescription: String
    let thumbnails: Thumbnails
    let resourceID: ResourceID
}

// MARK: - ResourceID
struct ResourceID: Codable {
    let videoID: String
}

// MARK: - Thumbnails
struct Thumbnails: Codable {
    let high,maxres: High
}

// MARK: - High
struct High: Codable {
    let url: String
    let width,height: Int
}

我正在调用函数

func ParseJson() {

    // Array for  the list of video objects
    var videos = [Video]()

    if let jsonData = jsonString.data(using: .utf8) {
        let decoder = JSONDecoder()
        
        do {
            let parsedJson = try decoder.decode(Welcome.self,from: jsonData)
            print("here")
        } catch {
            print(error.localizedDescription)
        }
      
      // Output the contents of the array
      dump(videos)
    } else {
      print("Error,unable to parse JSON")
    }
}

根据我发现的教程和在线资源,只要这里的结构正确,我就应该能够将json字符串解码为结构。 输出始终是来自catch语句的“操作无法完成”。 任何帮助表示赞赏。

谢谢

解决方法

您的代码中存在很多错误:

  • DataTableWelcome.items的数组,而不仅仅是一个。
  • Item是ISO 8601格式,因此您需要相应地设置解码器的Snippet.publishedAt
  • 按键拼写错误:
    • dateDecodingStrategy,而不是description
    • snippetDescription,而不是resourceId
    • resouceID,而不是videoId

这是更新的结构和解码代码:

videoID

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。