我必须解析一些非常糟糕的JSON设计,老实说,我从未遇到过这样的JSON。以下是整个JSON文件的简化片段:
{
"5ee70183-87fe-4799-802e-ef7f5e7323db":
{
"title": "Bank 1",
"logo": "655ee02d87cf4cdf912c3507233b0520.gif"
},
"332c7078-97ad-4bf7-b8ee-44d85a9c88d1":
{
"title": "Bank 2",
"logo": "655ee02d87cf4cdf912c3507233b0520.gif"
},
"8e9bd4c8-6f4a-4663-ae86-b8fbaf295030":
{
"title": "Bank 3",
"logo": "655ee02d87cf4cdf912c3507233b0520.gif"
}
}
如您所见,“根”键是一些UUID。那些带有值的键应该是一个列表,但是不是对列表使用正确的[]括号,而是使用{}错误的键。如果我使用codables进行解析,则必须创建具有UUID名称的结构,但最糟糕的是,此“列表”不是固定的,而在理论上是不受限制的。因此,我的工作是解析此JSON并获取一组银行实体。由于我目前感到震惊和困惑,我只是觉得我无法使用codables,需要手动将其解析为字典,并通过分配给正确的列表项从那里获取属性。如果您遇到这样的问题或知道更好的解析选项,它将极大地帮助我解决此问题。
答案 0 :(得分:1)
您需要
let res = try! JSONDecoder().decode([String:Root].self,from:data)
print(Array(res.values))
struct Root: Codable {
let title, logo: String
}