Codable中单个数据的多个编码键

我使用的API支持多国语言。例如:

// For Japanese
{
    "earthquake_detail": {
        "advisory_title_ja": "津波注意報",
        "depth_title_ja": "震源深さ",
        "depth_value_ja": "30km",
    }
}

// For English

{
    "earthquake_detail": {
        "advisory_title_en": "Tsunami Advisory",
        "depth_title_en": "Depth",
        "depth_value_en": "30km",       
    }
}

我正在使用快速编码将它们映射到结构。有没有一种方法可以将多个编码键映射到单个变量?这是我的快速结构。

struct EarthquakeDetail: Codable {
    var advisoryTitle, depthTitle, depthValue: String?

    enum CodingKeys: String, CodingKey {
        case advisoryTitle = "advisory_title_ja"
        case depthTitle = "depth_title_ja"
        case depthValue = "depth_value_ja"
    }
}

我想获得的是日语,这将是编码密钥:

enum CodingKeys: String, CodingKey {
            case advisoryTitle = "advisory_title_ja"
            case depthTitle = "depth_title_ja"
            case depthValue = "depth_value_ja"
        }

对于英语:

enum CodingKeys: String, CodingKey {
            case advisoryTitle = "advisory_title_en"
            case depthTitle = "depth_title_en"
            case depthValue = "depth_value_en"
        }
瓦迪安

如果您不打算使用该convertFromSnakeCase策略,请添加自定义密钥解码策略,该策略_xx将从三个编码密钥中删除

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .custom { codingKeys in
    let lastKey = codingKeys.last!
    if lastKey.intValue != nil || codingKeys.count != 2 { return lastKey }
    if codingKeys.dropLast().last!.stringValue != "earthquake_detail" { return lastKey }
    return AnyCodingKey(stringValue: String(lastKey.stringValue.dropLast(3)))!
}

如果earthquake_detail密钥比第2级上密钥深,则进行!= 2相应更改

为了能够创建自定义编码密钥,您需要

struct AnyCodingKey: CodingKey {
    var stringValue: String
    var intValue: Int?

    init?(stringValue: String) { self.stringValue = stringValue }

    init?(intValue: Int) {
        self.stringValue = String(intValue)
        self.intValue = intValue
    }
}

现在声明EarthquakeDetail如下

struct EarthquakeDetail: Codable {
    var advisoryTitle, depthTitle, depthValue: String

    enum CodingKeys: String, CodingKey {
        case advisoryTitle = "advisory_title"
        case depthTitle = "depth_title"
        case depthValue = "depth_value"
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单个 LineChartView 中的多个数据集

来自分类Dev

在单个图表中显示多个数据点

来自分类常见问题

单个数据框中的多个列之间的差异

来自分类Dev

在单个脚本中连接多个数据库的利弊

来自分类Dev

Cassandra中的单个数据列与多个列

来自分类Dev

单个数据框中的多个列之间的差异

来自分类Dev

如何在单个API路径中过滤多个数据?

来自分类Dev

在chart.js中的单个数据中显示多个数据

来自分类Dev

在单个数据库表中存储多个数据表

来自分类Dev

从R中的单个数据帧创建多个数据帧

来自分类Dev

使用循环从多个数据帧的列中创建单个数据帧

来自分类Dev

用键将多个数组推入单个数组

来自分类Dev

将多个数据框列连接到一个数据框列下的单个数组中

来自分类Dev

在单个数组中查找重复的键

来自分类Dev

Nedb多个集合单个数据存储

来自分类Dev

Nedb多个集合单个数据存储

来自分类Dev

从单个文件读取多个数据集

来自分类Dev

从单个数据迭代创建多个项目

来自分类Dev

在单个活动中处理来自多个意图的多个数据

来自分类Dev

如何在单个查询中从多个数据库检索数据?

来自分类Dev

单个数据库调用从EF Core中的多个表中提取数据

来自分类Dev

将来自多个数据库的数据吸收到单个solr集合中

来自分类Dev

将来自多个数据库的数据吸收到单个solr集合中

来自分类Dev

从数据库中的单个单元格获取多个数据

来自分类Dev

如何在D3中的单个数据迭代中绘制多个项目?

来自分类Dev

从单个结果集中的多个数据库中检索相同名称表中的记录

来自分类Dev

在每行单个数据单元格中每行<td>拆分多个数据单元格-jQuery

来自分类Dev

将多个数据集合并为单个数据集而不使用 Apache Spark sql 中的 unionAll 函数

来自分类Dev

在单个foreach中迭代多个数组

Related 相关文章

  1. 1

    单个 LineChartView 中的多个数据集

  2. 2

    在单个图表中显示多个数据点

  3. 3

    单个数据框中的多个列之间的差异

  4. 4

    在单个脚本中连接多个数据库的利弊

  5. 5

    Cassandra中的单个数据列与多个列

  6. 6

    单个数据框中的多个列之间的差异

  7. 7

    如何在单个API路径中过滤多个数据?

  8. 8

    在chart.js中的单个数据中显示多个数据

  9. 9

    在单个数据库表中存储多个数据表

  10. 10

    从R中的单个数据帧创建多个数据帧

  11. 11

    使用循环从多个数据帧的列中创建单个数据帧

  12. 12

    用键将多个数组推入单个数组

  13. 13

    将多个数据框列连接到一个数据框列下的单个数组中

  14. 14

    在单个数组中查找重复的键

  15. 15

    Nedb多个集合单个数据存储

  16. 16

    Nedb多个集合单个数据存储

  17. 17

    从单个文件读取多个数据集

  18. 18

    从单个数据迭代创建多个项目

  19. 19

    在单个活动中处理来自多个意图的多个数据

  20. 20

    如何在单个查询中从多个数据库检索数据?

  21. 21

    单个数据库调用从EF Core中的多个表中提取数据

  22. 22

    将来自多个数据库的数据吸收到单个solr集合中

  23. 23

    将来自多个数据库的数据吸收到单个solr集合中

  24. 24

    从数据库中的单个单元格获取多个数据

  25. 25

    如何在D3中的单个数据迭代中绘制多个项目?

  26. 26

    从单个结果集中的多个数据库中检索相同名称表中的记录

  27. 27

    在每行单个数据单元格中每行<td>拆分多个数据单元格-jQuery

  28. 28

    将多个数据集合并为单个数据集而不使用 Apache Spark sql 中的 unionAll 函数

  29. 29

    在单个foreach中迭代多个数组

热门标签

归档