Ios 尝试使用swift 4.2中的值在json结构中的位置来解码该值
如何使用swift Decodable解码以下内容?我只对提取值感兴趣Ios 尝试使用swift 4.2中的值在json结构中的位置来解码该值,ios,json,swift,api,Ios,Json,Swift,Api,如何使用swift Decodable解码以下内容?我只对提取值感兴趣 { "batchcomplete":"", "query":{ "normalized":[ ], "pages":{ "434325":{ //can be any number! "pageid":434325, "ns":0, "title":"asdfasdfsa",
{
"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
我最多只能得到一页,所以理想情况下我只需要抓取第一个元素。在“查询类型”之前,您的解码代码都是正常的 那么应该用什么来代替呢
struct Query: Decodable {
let normalized: [String]
let pages: [String: Page]
struct Page: Decodable {
let pageid: Int
let title: String
let extract: String
}
}
因此,关键点是:
[String://code>,因为任何JSON对象
都可以映射到[String://code>
页面。条目
,只需将所有字段放入页面
extract
而不是entry.query.pages.first.extract
您必须使用entry.query.pages.first?.value.extract
(extract
第一个随机页面,因为[String:page]
未排序)或entry.query.pages.sorted(按:排序器).first?.value.extract
(其中,sorter
是一个函数,它接受两个键值对,如果第一个键值对按顺序在第二个键值对之前,则返回true)使用某种顺序获取第一个
使用泛型解码JSON如果您只需要一个值,SwiftyJSON可能更容易使用。这有助于复制