【问题标题】:Converting from snake case to camel case using keyDecodingStrategy使用 keyDecodingStrategy 从蛇案例转换为骆驼案例
【发布时间】:2019-01-03 10:16:02
【问题描述】:

我正在尝试使用 Codable 将传入的JSON 自动解析到我的模型中。它工作正常,但后来我了解了_keyDecodingStrategy_,并想使用它。它运行良好并且能够减少我的代码,因为我不必为我的模型编写 CodingKeys 枚举。

但现在问题是服务器发送了一个新变量。变量是post_url_110x110

我认为它会转换为 postUrl110x110,但事实并非如此。请帮助我进行camelCase 转换,或者建议我是否应该在这种情况下避免自动转换。

【问题讨论】:

  • 您应该更新您的问题,以包括您需要解码的实际 JSON 以及您的数据模型和用于解码的代码。
  • .keyDecodingStrategyCodingKeys 可以一次并排使用。你必须同时使用它们。缺点是您必须涵盖CodingKeys 的所有案例。只需提供应用.convertFromSnakeCase 时失败的那些属性的原始值。保留其他情况(意思是,您不必编写原始值)。要了解更多信息,请参阅this answer
  • 是的。 KeyDecodingStrategy 是对我现有的使用 Codable 的 json 解码的即兴创作。

标签: ios swift codable


【解决方案1】:

如果您将数据模型属性从 postUrl110x110 重命名为 postUrl110X110 并使用大写 X,它将对您有用。我知道这不是理想的解决方案,但值得注意。检查以下示例:

struct DataItem: Codable {
    var itemId: String
    var postUrl110X110: String
}

let json = """
{
    "item_id": "abcd",
    "post_url_110x110": "https://example.org/image.png"
}
""".data(using: .utf8)!

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase

print(try! decoder.decode(DataItem.self, from: json))

【讨论】:

  • 很棒的马丁。非常感谢。这正是我想要的。我可以更改我的模型名称,但无法控制传入的 json。现在我可以使用 Codable + keyDecodingStrategy 将 json 直接无缝解析到我的模型中。再次感谢。
【解决方案2】:

你可以试试这个tool

示例输入

输出

  • 如果您需要进一步的帮助,请告诉我。

【讨论】:

  • 从我的角度来看,这个答案是无效的。 Amit 正在询问使用 keyDecodingStrategy 而不手动编写 CodingKeys 的方式
猜你喜欢
  • 2020-02-10
  • 2019-10-30
  • 1970-01-01
  • 2022-06-11
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 2017-05-08
相关资源
最近更新 更多