Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 4使用随机密钥解码嵌套JSON_Json_Swift_Decode_Swift4 - Fatal编程技术网

Swift 4使用随机密钥解码嵌套JSON

Swift 4使用随机密钥解码嵌套JSON,json,swift,decode,swift4,Json,Swift,Decode,Swift4,我是Swift 4的新手,正在尝试从维基百科API解码这个JSON。我正在努力定义一个结构,因为我找到的所有示例/教程都只嵌套了1-2层 除此之外,当其中一个键是随机键时,如何解码数据 谢谢 { "batchcomplete": "", "query": { "pages": { "RANDOM ID": { "pageid": 21721040, "ns": 0, "ti

我是Swift 4的新手,正在尝试从维基百科API解码这个JSON。我正在努力定义一个结构,因为我找到的所有示例/教程都只嵌套了1-2层

除此之外,当其中一个键是随机键时,如何解码数据

谢谢

{
  "batchcomplete": "",
  "query": {
      "pages": {
          "RANDOM ID": {
              "pageid": 21721040,
              "ns": 0,
              "title": "Stack Overflow",
              "extract": "Stack Overflow is a privately held website, the flagship site of the Stack Exchange Network...."
         }
      }
   }
}
此解决方案的工作原理是:

//: Playground - noun: a place where people can play
import Foundation
var str = """
{
    "batchcomplete": "",
    "query": {
        "pages": {
            "RANDOM ID": {
                "pageid": 21721040,
                "ns": 0,
                "title": "Stack Overflow",
                "extract": "Stack Overflow is a privately held website, the flagship site of the Stack Exchange Network...."
            }
        }
    }
}
"""
struct Content: Decodable {
    let batchcomplete: String
    let query: Query
    struct Query: Decodable {
        let pages: Pages
        struct Pages: Decodable {
            var randomId: RandomID?
            struct RandomID: Decodable {
                let pageid: Int64
                let ns: Int64
                let title: String
                let extract: String
            }
            init(from decoder: Decoder) throws {
                let container = try decoder.container(keyedBy: CodingKeys.self)
                for key in container.allKeys {
                    randomId = try? container.decode(RandomID.self, forKey: key)
                }
                print(container.allKeys)
            }
            struct CodingKeys: CodingKey {
                var stringValue: String
                init?(stringValue: String) {
                    self.stringValue = stringValue
                }
                var intValue: Int?
                init?(intValue: Int) {
                    return nil
                }
            }
        }
    }
}
let data = str.data(using: .utf8)!
var content = try? JSONDecoder().decode(Content.self, from: data)
print(content)

RANDOM ID
的值是一个字典,键是
String
,因此您可以创建一个表示该值的结构,并解码
[String:MyStruct]
是,它是一个随机数@Matt为什么使用
Int64
而不是
Int
?@DávidPásztor只是一个示例。没有了。这段代码应该优化。很好,谢谢@维亚切斯拉夫