如何使用swift Decodable解码以下内容?我只对提取值
感兴趣{
"batchcomplete":"",
"query":{
"normalized":[ ],
"pages":{
"434325":{ //can be any number!
"pageid":434325,
"ns":0,
"title":"asdfasdfsa",
"extract":""
我正在尝试以下操作:
struct Entry: Decodable {
let batchcomplete: String
let query: Query
struct Query: Decodable {
let normalized: [String]
let pages: Page
struct Page: Decodable {
let pageid: Entry // I think this is going to be an issue
struct Entry: Decodable {
let title: String
let extract: String
}
}
}
}
我正在尝试像这样检索提取物:
print(entry.query.pages.first.extract)
是否可以为此使用 .first ?
我只会每个人最多获得一页,因此理想情况下,我只会抓住第一个元素。
答案 0 :(得分:1)
您的解码代码可以正常使用,直到出现“查询类型”为止。
那应该用什么代替
struct Query: Decodable {
let normalized: [String]
let pages: [String: Page]
struct Page: Decodable {
let pageid: Int
let title: String
let extract: String
}
}
所以,关键点:
[String: <SomeDecodableType>]
,因为任何JSON Object
都可以映射到[String: <Decodable>]
。Page.Entry
,只需将所有字段放入Page
extract
而不是entry.query.pages.first.extract
,您将不得不使用entry.query.pages.first?.value.extract
(第一页随机页面的extract
,因为[String: Page]
未排序)或{{ 1}}(其中entry.query.pages.sorted(by: sorter).first?.value.extract
是某个函数,它接受两个键值对,如果第一个应该按顺序移到第二个之前,则返回true)以某种顺序获得sorter
。