将远程 JSON 解码为 Swift iOS 中的自定义结构

Decoding remote JSON into custom struct in Swift iOS

我似乎无法解码自定义结构中的 json 结果。我包含了下面的代码以及 JSON 结果。

import SwiftUI

struct Result: Decodable {
    public var result: [DrilledResults]
}

struct DrilledResults: Decodable {
    public var name: String
}

public class Services: ObservableObject {
    @Published var shows = [Result]()
    @Published var query = "hello"

    init() {
        load()
    }

    func load() {
        let apiKey = "ajkjshfsdkljflksdjflkdsfjf"
        guard let url = URL(string: "https://api.themoviedb.org/3/search/tv?api_key=\(apiKey)&language=en-US&page=1&query=\(query)&include_adult=false") else { return }
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            do {
                if let d = data {
                    let decoded = try JSONDecoder().decode(Result.self, from: d)
                    DispatchQueue.main.async {
                        self.shows = [decoded]
                    }
                } else {
                print("No Data")
                }
            } catch {
                print(error)
            }

        }
        .resume()
    }
}

这是 json...

{ "page": 1, "total_results": 101, "total_pages": 6, "results":[ { "original_name": "Johnny Test", "genre_ids":[ 16, 35 ], "name": "Johnny Test", "popularity": 13.185, "origin_country": [ "CA", "US" ], "vote_count": 49, "first_air_date": "2005-09-17", "backdrop_path":空, "original_language": "en", "id": 1769, "vote_average": 5.1, "overview": "Young Johnny is gung-ho and full of courage. Johnny's brainiac twin sisters, Susan and Mary, use Johnny as their guinea pig for their outrageous scientific experiments. If they can dream it up, Johnny will do it; as long as his genetically engineered super dog, Dukey, can come along.", "poster_path": 空 }, { "original_name": "Bäst i test", "id": 71761, "name": "Bäst i test", "popularity": 3.364, "vote_count": 2, "vote_average": 4, "first_air_date": "2017-03-10", "poster_path": "/s0sERZMWn8f9J3TccGb09hEV3HW.jpg", "genre_ids":[ 35 ], "original_language": "sv", "backdrop_path": "/ammCpFm1kZ2d4KWXXhsjzBPsea7.jpg", "overview": "Swedish version of Taskmaster.", "origin_country": [ "SE" ] } ] }

我已经尝试了很多结构格式的组合,但我已经失败了几个小时。任何帮助深表感谢。

在结果后加上 's'。

struct Result: Decodable {
    public var results: [DrilledResults]
}

您的 Swift 结构需要与您的 JSON 匹配,但事实并非如此。

可以看到外面的对象有一个叫做results的属性,是一个数组。你的结构有 result - 没有 's'.

struct Result: Decodable {
    public var results: [DrilledResults]
}

现在,您将能够检索数据,并且可以清理 self.shows - 您可以将其声明为 [=15= 的数组,而不是将其声明为 DrilledResults 然后说

self.shows = decoded.results