首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift -使用jsonDecoder解码特定密钥

Swift -使用jsonDecoder解码特定密钥
EN

Stack Overflow用户
提问于 2020-08-21 11:49:08
回答 1查看 70关注 0票数 0

我不确定如何表达我的问题,但我正在尝试找到如何在不创建多个模型的情况下解码整个json,而只解码一个特定的键。

JSON示例:

代码语言:javascript
复制
{
  "page": 1,
  "results": [
    {
      "poster_path": "/e1mjopzAS2KNsvpbpahQ1a6SkSn.jpg",
      "adult": false,
      "overview": "From DC Comics comes the Suicide Squad, an antihero team of incarcerated supervillains who act as deniable assets for the United States government, undertaking high-risk black ops missions in exchange for commuted prison sentences.",
      "release_date": "2016-08-03",
      "genre_ids": [
        14,
        28,
        80
      ],
      "id": 297761,
      "original_title": "Suicide Squad",
      "original_language": "en",
      "title": "Suicide Squad",
      "backdrop_path": "/ndlQ2Cuc3cjTL7lTynw6I4boP4S.jpg",
      "popularity": 48.261451,
      "vote_count": 1466,
      "video": false,
      "vote_average": 5.91
    },
    ...
  ]
}

我只需要拿到results。现在我有两个模型:

代码语言:javascript
复制
struct Movies: Codable {
    let results: [MovieResult]?
}

struct MovieResult: Codable {
    let popularity: Double?
    let poster_path: String?
    let backdrop_path: String?
    let title: String?
    let vote_average: Double?
    let overview: String?
    let release_date: String?
}

并获得解码:

代码语言:javascript
复制
        RESTful.request(path: path, method: "GET", parameters: parameters, headers: nil) { (result) in
            switch result {
            case .failure(let error):
                completion(.failure(.networkingError))
            case .success(let data):
                let jsonDecoder = JSONDecoder()
                do{
                    let popularMovies = try jsonDecoder.decode(Movies.self, from: data)
                    completion(.success(popularMovies))
                } catch (let error) {
                    completion(.failure(.errorDecoding))
                }
            }
        }

由于我只需要results,有没有办法(使用jsonDecoder)将其解码为单个模型

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-21 12:32:47

JSON必须始终从根对象中解码。

但是有一个非常简单的解决方案,声明Result类型

代码语言:javascript
复制
Result<MovieResult,Error>

并在成功时调用completion

代码语言:javascript
复制
completion(.success(popularMovies.results))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63516253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档