swift4 可解码方法正确的结构来解析埋在 JSON 中的数组?
swift4 Decodable method correct structure to parse array buried inside JSON?
使用 SWIFT4 和 Decodable 我试图用下面的代码在这个 JSON URL, see JSON IMAGE 解析数组 pageids
的第一个结果,但我每次都得到 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)
您需要正确建模数据。
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)
}
使用 SWIFT4 和 Decodable 我试图用下面的代码在这个 JSON URL, see JSON IMAGE 解析数组 pageids
的第一个结果,但我每次都得到 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)
您需要正确建模数据。
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)
}