Swift 4使用随机密钥解码嵌套JSON
我是Swift 4的新手,正在尝试从维基百科API解码这个JSON。我正在努力定义一个结构,因为我找到的所有示例/教程都只嵌套了1-2层 除此之外,当其中一个键是随机键时,如何解码数据 谢谢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
{
"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只是一个示例。没有了。这段代码应该优化。很好,谢谢@维亚切斯拉夫