首页 > 解决方案 > Swift Codable:使用动态键编码结构

问题描述

我想要以下 JSON 结构(假示例):

{
    "Admin" : 
    {
        "name" : "John",
        "age" : "42"
    },
    "Sales" : 
    {
        "name" : "John",
        "age" : "42"
    },
    "CEO" : 
    {
        "name" : "Peter",
        "age" : "52",
        "salary" : "100000"
    },
    "Janitor" : 
    {
        "name" : "Matthew",
        "age" : "22"
    }
}

如您所见,结构如果确定,但结构的名称是动态的。

如何将其转换为 Swift Codable 结构?当前尝试:

struct Positions: Codable
{
    var posDicts: [String: Position] = [:]
}

struct Position: Codable
{
    let name: String
    let age: Int
    let salary: Int?
}

但是,这将给出以下结果:

"posDicts" : {
    "Admin" : 
    {
        "name" : "John",
        "age" : "42"
    },
    "Sales" : 
    {
        "name" : "John",
        "age" : "42"
    },
    "CEO" : 
    {
        "name" : "Peter",
        "age" : "52",
        "salary" : "100000"
    },
    "Janitor" : 
    {
        "name" : "Matthew",
        "age" : "22"
    }
}

我不想要 JSON 中的“posDicts”。什么是最好/最简单的解决方案?

PS:有关使用动态键可解码 Swift Codable 的相关问题

标签: swiftcodableencodable

解决方案


而不是解码

let result = try JSONDecoder().decode(Positions.self, from: data)

删除Positions结构并解码

let result = try JSONDecoder().decode([String:Position].self, from: data)

要对字典进行相应的编码,请将其声明为

 var positions = [String:Position]()

推荐阅读