如何解决如何在Swift 4中解码此JSON
我有需要解码的JSON响应,但我只需要其中的某些属性。我想抓住传奇的名字和他们对传奇的杀戮数。为了使解码器正常工作,我如何通过Legend Model进行构造?
`
A = df.groupby("items").size().rename("count")
A
items
bike 3
car 3
jet 4
Name: count,dtype: int64
B = (
df.groupby(["items","status"])
.size()
.unstack(fill_value=0)
.rename_axis(columns=None)
)
B
fail pass
items
bike 1 2
car 2 1
jet 4 0
pd.concat((A,B),axis=1).reset_index()
items count fail pass
0 bike 3 1 2
1 car 3 2 1
2 jet 4 4 0
}
上面是JSON响应,我希望解码器仅显示传说以及它们在数据数组中所具有的杀伤力。我目前无法访问每个图例下的“数据”数组。
解决方法
您可以使用 Codable
获得预期的响应。使用以下模型,
struct Response: Codable {
let legends: Legends
}
struct Legends: Codable {
let all: [String:Legend]
}
struct Legend: Codable {
let data: [LegendData]?
var kills: Int {
return self.data?.filter({$0.key.lowercased() == "kills"}).first?.value ?? 0
}
var damage: Int {
return self.data?.filter({$0.key.lowercased() == "damage"}).first?.value ?? 0
}
}
struct LegendData: Codable {
let value: Int
let key: String
}
由于每个kills
仅需要damage
和Legend
的计数,因此无需解析 JSON 中的所有内容。
在Legend
模型中,我创建了2个计算属性 kills
和damage
。这些属性将直接返回每个图例的击杀数和伤害数,而无需每次访问时都编写那么多代码。
现在像这样解析 JSON data
do {
let response = try JSONDecoder().decode(Response.self,from: data)
response.legends.all.forEach { (name,legend) in
let kills = legend.kills
let damage = legend.damage
print("\(name) - Kills: \(kills),Damage: \(damage)")
}
} catch {
print(error)
}
示例输出:
Pathfinder - Kills: 1140,Damage: 257532
Octane - Kills: 0,Damage: 0
Wattson - Kills: 0,Damage: 0
Wraith - Kills: 269,Damage: 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。