0

使用 SWIFT4 和 Decodable 我试图解析来自pageidsJSON URL的数组的第一个结果,请参阅带有以下代码的JSON IMAGE但我每次都得到 nil 值;问题似乎在于我无法分配任何变量来表示 pageids[0],有什么建议吗?我还尝试像 JSON 一样嵌套结构,但也没有任何成功。我不明白,我发现的每个教程似乎都在做我所做的事情......

struct WikiData: Decodable {
var batchcomplete: String
var query: [Query]
var pageids : [Pageids]
}
struct Query : Decodable {
    var pageids : [Pageids]
}
struct Pageids : Decodable {            
}

let jsonData = try! Data(contentsOf: url)
let datastring = String(data: jsonData, encoding: .utf8)
print (datastring as Any) // JSON prints fine in console

let id = try? JSONDecoder().decode(WikiData.self, from: jsonData)
        print(WikiData?.pageids as Any)
4

1 回答 1

0

您需要正确建模数据。

import Foundation

struct WikiData: Codable {
    var batchcomplete: String
    var query: Query
}

struct Query: Codable {
    var normalized: [[String: String]]
    var pageids: [String]
    var pages: [Int: PageData]
}

struct PageData: Codable {
    var pageid: Int
    var ns: Int
    var title: String
    var extract: String
    var thumbnail: Thumbnail
    var pageimage: String
}

struct Thumbnail: Codable {
    var source: URL
    var width: Int
    var height: Int
}

let url = URL(string: "https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts%7Cpageimages&exintro=&explaintext=&titles=rose&indexpageids=&redirects=1&pithumbsize=500")!
let jsonData = try! Data(contentsOf: url)
let datastring = String(data: jsonData, encoding: .utf8)
let decoder = JSONDecoder()
do {
    // Decode data to object
    let object = try decoder.decode(WikiData.self, from: jsonData)
    print(object.query.pageids[0])
}
catch {
    print(error)
}
于 2017-09-20T16:03:59.447 回答