使用 JSON swift4 中的密钥解码结构
Decoding a struct using a key from JSON swift4
使用 Swift 4 的 Encoder
& Decoder
协议和 JSONDecoder
如何使用给定 JSON.
即鉴于下面的 JSON 我希望只使用 results
来初始化 Example
{
"boolean": true,
"number": 123,
"results": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
struct Example: MDB, Codeable{
var a: String
var b: String
var c: String
}
public static func initalize<T: Codable & MDBItem>(json: Data) -> [T]{
var items = [T]()
let decoder = JSONDecoder()
do {
//How do I initialize `T` using a key from the JSON given
//ie. decoder.decode([T].self, from: json["results"])
// Or decoder.decode(["results", [T].self, from: json)
items = try decoder.decode([T].self, from: json)
} catch {
print("error trying to convert data to JSON")
}
return items
}
一种可能的简单方法是创建包装器结构。
所以,你有这个 JSON
let json = """
{
"boolean": true,
"number": 123,
"results": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
"""
因为您只对 "results"
部分感兴趣,所以您定义了这个结构
struct Example: Codable {
let a: String
let c: String
let e: String
}
包装器
现在,为了利用 Codable
协议(在 Swift 4 中可用)的强大功能,您可以像这样创建一个包装器结构
struct Wrapper: Codable {
let results: Example
}
The only purpose of the Wrapper struct is to define a path from the root of the original JSON to the section you are interested in. This was the Codable
protocol will do the rest of the job for you.
解码
现在您可以使用 Wrapper 结构轻松解码 JSON。
if
let data = json.data(using: .utf8),
let wrapper = try? JSONDecoder().decode(Wrapper.self, from: data) {
let results = wrapper.results
print(results)
}
最后你可以从包装器中提取 results
属性。
使用 Swift 4 的 Encoder
& Decoder
协议和 JSONDecoder
如何使用给定 JSON.
即鉴于下面的 JSON 我希望只使用 results
来初始化 Example
{
"boolean": true,
"number": 123,
"results": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
struct Example: MDB, Codeable{
var a: String
var b: String
var c: String
}
public static func initalize<T: Codable & MDBItem>(json: Data) -> [T]{
var items = [T]()
let decoder = JSONDecoder()
do {
//How do I initialize `T` using a key from the JSON given
//ie. decoder.decode([T].self, from: json["results"])
// Or decoder.decode(["results", [T].self, from: json)
items = try decoder.decode([T].self, from: json)
} catch {
print("error trying to convert data to JSON")
}
return items
}
一种可能的简单方法是创建包装器结构。
所以,你有这个 JSON
let json = """
{
"boolean": true,
"number": 123,
"results": {
"a": "b",
"c": "d",
"e": "f"
},
"string": "Hello World"
}
"""
因为您只对 "results"
部分感兴趣,所以您定义了这个结构
struct Example: Codable {
let a: String
let c: String
let e: String
}
包装器
现在,为了利用 Codable
协议(在 Swift 4 中可用)的强大功能,您可以像这样创建一个包装器结构
struct Wrapper: Codable {
let results: Example
}
The only purpose of the Wrapper struct is to define a path from the root of the original JSON to the section you are interested in. This was the
Codable
protocol will do the rest of the job for you.
解码
现在您可以使用 Wrapper 结构轻松解码 JSON。
if
let data = json.data(using: .utf8),
let wrapper = try? JSONDecoder().decode(Wrapper.self, from: data) {
let results = wrapper.results
print(results)
}
最后你可以从包装器中提取 results
属性。