【问题标题】:How to deal with changing network call return structures for JSON object decoding in Swift 4如何处理 Swift 4 中 JSON 对象解码的网络调用返回结构变化
【发布时间】:2023-04-07 12:33:01
【问题描述】:

我有一个结构,它正在填充来自基于休息的 API 返回的网络对象类型。我遇到的问题是,对于某些网络调用,返回的对象可能不包含结构中的所有对象参数,并且类没有初始化:

例子:

struct Rebate: Codable {
    let categoryID: Int?
    let customerTypes: [RebateCustomerType]?
    let financialInstitution: String
    let financialInstitutionID: Int
    let id: Int
    let identCode: String
    let lenderCode: String
    let maxCreditScore: Int
    let minCreditScore: Int
    let name: String
    let nameDisplay: String
    let number: String
    let receipientType: Int
    let revisionDate: String
    let selected: Bool?
    let startDate: String
    let stopDate: String
    let terms: [Term]?
    let transactionType: Int
    let type: Int
    let updateTS: String
    let value: RebateValue
    let valueType: Int
    let isGeneric: Bool?
    let maxTerm: [MaxTerm]?

如果网络调用返回没有该数据,我想了解如何忽略例如 maxTerm 参数或任何其他参数。

这可能吗?

我们正在使用的 API 为许多参数更改了类结构。这会导致数据无法正确解析为有效的类对象。

我已经搜索过 Stackoverflow 没有占上风...

提前感谢您的帮助。

【问题讨论】:

  • 只要将这些参数设为可选,它就会解析
  • 您已经将maxTerm 定义为可选属性,这是处理此问题的正确方法

标签: json swift api class struct


【解决方案1】:

如果您将这些参数设为可选,它应该会解析。但是我看到您忘记将参数 value 设为可选。试着让它成为可选的。

【讨论】:

  • 我会试试这个。谢谢。
  • 我将结构更改为可选项,但是当找不到参数时,我仍然没有得到解析的数据...租约 = 试试? JSONDecoder().decode(Rebate.self, from: data) lease?.id lease 为 nil,因为它没有解析。
  • 检查您是否忘记在 LeaseData 结构/类中设置任何参数。
  • 我正在使用“粘贴 JSON 快速类型”来创建类/结构并翻转开关以使所有参数成为可选参数。我正在使用最简约的配置。 (quicktype.io) 他们也有一个 macOS 应用程序。我再次检查了结构。所有参数都是可选的。顺便说一句,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多