在Swift

时间:2019-06-21 11:50:57

标签: arrays json swift dictionary parsing

我必须解析一些非常糟糕的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,需要手动将其解析为字典,并通过分配给正确的列表项从那里获取属性。如果您遇到这样的问题或知道更好的解析选项,它将极大地帮助我解决此问题。

1 个答案:

答案 0 :(得分:1)

您需要

let res = try! JSONDecoder().decode([String:Root].self,from:data)
print(Array(res.values))

struct Root: Codable {
   let title, logo: String
}