杰森:
let json = """
[{
"name":"abc"
"id":"abc123"
"university":"CMU"
},
{
"name":"xyz"
"id":"xyz123"
"university":"NYU"
}]
"""
結構:
struct Student: Codable {
let name: String
let university: String
}
我知道我可以做得到學生名單
let students = try JSONDecoder().decode([Student].self, from: json.data(using: .utf8)!)
但我正在嘗試創建一個字典,以便我可以通過學生 ID 訪問任何學生。
let students = [String:Student]()
- 我如何使用可編碼來解決這個問題?
- 有沒有辦法可以使用學生 ID 作為鍵和值作為學生物件?
- 我知道我可以運行一個回圈并附加我的字典,但我正在尋找更好的解決方案。
謝謝!
uj5u.com熱心網友回復:
您可以使用
步驟1:
struct Student: Codable {
var name: String = ""
var id: String = ""
var university: String = ""
}
第2步:
let students = try JSONDecoder().decode([Student].self, from: json.data(using: .utf8)!)
let groupedDictionary = Dictionary(grouping: students, by:
{String($0.id)})
uj5u.com熱心網友回復:
您可以將 JSON 解碼為unkeyedContainer包裝器結構
let json = """
[{
"name":"abc",
"id":"abc123",
"university":"CMU"
},
{
"name":"xyz",
"id":"xyz123",
"university":"NYU"
}]
"""
struct Root : Decodable {
var students = [String:Student]()
init(from decoder: Decoder) throws {
var arrayDecoder = try decoder.unkeyedContainer()
while !arrayDecoder.isAtEnd {
let student = try arrayDecoder.decode(Student.self)
let id = student.id
students[id] = student
}
}
}
struct Student: Decodable {
let name, id, university: String
}
let result = try JSONDecoder().decode(Root.self, from: Data(json.utf8))
print(result.students)
uj5u.com熱心網友回復:
您可以簡單地為 Element 為 Student 的集合提供自己的下標:
extension Collection where Element == Student {
subscript(_ id: String) -> Element? {
first(where: {$0.id == id})
}
}
struct Student: Codable, Hashable {
let name: String
let id: String
let university: String
}
let json = """
[{
"name":"abc",
"id":"abc123",
"university":"CMU"
},
{
"name":"xyz",
"id":"xyz123",
"university":"NYU"
}]
"""
let students = try JSONDecoder().decode([Student].self, from: Data(json.utf8))
if let student = students["xyz123"] {
print(student.name) // "xyz\n"
print(student.id) // "xyz123\n"
print(student.university) // "NYU\n"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412415.html
標籤:
上一篇:如何從串列串列轉換為字典
