簡體   English   中英

嘗試使用其在 json 結構中的位置解碼 swift 4.2 中的值

[英]trying to decode value in swift 4.2 using its position in the json structure

如何使用 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

我只是每個人都會獲得最多一頁,所以理想情況下我會抓住第一個元素。

您的解碼代碼在“查詢類型”之前都可以。

那么應該使用什么來代替:

struct Query: Decodable {
    let normalized: [String]
    let pages: [String: Page]

    struct Page: Decodable {
        let pageid: Int
        let title: String
        let extract: String
    }
}

所以,關鍵點:

  1. 如果您不知道那里有哪些鍵,請使用[String: <SomeDecodableType>]因為任何JSON Object都可以映射到[String: <Decodable>]
  2. 您不需要聲明Page.Entry ,只需將所有字段都放到Page
  3. 要獲取extract而不是entry.query.pages.first.extract您必須使用entry.query.pages.first?.value.extract (第一個隨機頁面的extract ,因為[String: Page]未排序)或entry.query.pages.sorted(by: sorter).first?.value.extract其中sorter是一些功能,這需要兩個鍵值對,並返回true,如果第一個應該之前第二個為了去),以獲得first使用一些命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM