使用和不使用数组解码不同类型

2024-01-07

我正在尝试按如下方式解码错误,我正在以数组格式处理的大部分错误[String],但在少数情况下,错误不是数组格式,而是一个String.

如果数组格式出现错误,名称为errors,但如果是字符串格式则为error。我该如何处理这种情况?

我怎样才能处理这种情况?

struct CustomError: Codable {
  let errors: [String]
}

private func errorDecoding(data : Data) {
 let decoder = JSONDecoder()
 do {
  let errorData = try decoder.decode(CustomError.self, from: data)
 } catch {
  // TODO
 }
}

你必须手动实施init(from:)并尝试解码一种类型,如果失败,则解码另一种:

struct CustomError {
  let errors: [String]
}

extension CustomError: Decodable {
  enum CodingKeys: CodingKey { case errors, error }

  init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)

    do {
       self.errors = try container.decode([String].self, forKey: .errors) 
    } catch DecodingError.typeMismatch, 
            DecodingError.keyNotFound {
       let error = try container.decode(String.self, forKey: .error)
       self.errors = [error]
    }
  }
}

解码部分正常:

do {
   let error = try JSONDecoder().decode(CustomError.self, from: data)
} catch {
  // ..
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用和不使用数组解码不同类型 的相关文章

随机推荐

  • 复制到本地主机后,Wordpress 总是重定向到 https

    当我将 WordPress 安装从服务器复制到本地网络服务器 MAMP 并尝试访问时localhost 8888 它总是将 http 重定向到 https 所以我总是得到一个ERR SSL PROTOCOL ERROR 我在任何地方都找不到
  • Ninject 在 appharbor 上启动应用程序时崩溃

    我在部署在 appharbor 上的 MVC 3 项目上使用 Ninject 我注意到应用程序启动时出现异常 看起来 Ninject 内部的某些内容是原因 但我找不到任何答案 所以请帮助我 将尝试在此处添加完整的异常 Server Erro
  • Openid 禁止错误

    在我能够正确安装它 打开 id 库 后 我在让它工作时遇到了一些问题 我正在使用打开 id 选择器 http jvance com pages JQueryOpenIDPlugin xhtml一个 jquery 插件 问题是 当我单击任何打
  • 升级到 ADT 20 后,键盘在 Intel x86 Android 模拟器上停止工作

    我的意思是我不能再从笔记本电脑键盘输入 Android 模拟器了 虚拟键盘和屏幕键盘工作正常 升级到工具版本 20 后 我遇到了同样的问题 我必须编辑 AVD 以添加一个选项 如下所示 从 Eclipse 转到 AVD 管理器 选择特定的
  • 通过索引变量访问 SML 元组

    问题很简单 如何在SML中使用索引变量访问元组 val index 5 val tuple1 1 2 3 4 5 6 7 8 9 10 val correctValue index tuple1 我希望有人能够提供帮助 提前致谢 不存在接受
  • 配置 Flask 开发服务器在网络上可见

    我不确定这是否是 Flask 特定的 但是当我在开发模式下运行应用程序时 http localhost 5000 我无法从网络上的其他机器访问它 使用http dev host ip 5000 例如 当 Rails 处于开发模式时 它可以正
  • 如何在 Android 上的片段中使用共享首选项?

    我有一个片段 我想将 Facebook ID 存储在共享首选项中 我无法在获取首选项函数中编写私有模式 我还想在另一个片段中访问这个共享首选项 我怎样才能这样做呢 这是我的代码 Session openActiveSession getAc
  • 使用键盘输入切换值以进行绘图

    我有矩阵中的数据集 我想在一组上绘图 然后使用键盘输入移动到另一组 这很可能是这样的 for t 1 N plot data t pause end 但我想及时向前和向后移动t 例如使用箭头 好的 可以这样做 direction input
  • 如果 Ubuntu 上安装了多个 Java 版本,如何检查 Oracle Java 版本

    我两者都有OpenJDK and 甲骨文Java安装在我的 Ubuntu 上 如果激活的java是OpenJDK 有没有办法在bash shell中检查Oracle java的版本 update java alternatives l将列出
  • 非管理员用户上的客户端无法使用 net.pipe 与服务进行通信

    我有一个使用 net pipe 协议托管 WCF 服务的客户端应用程序 客户端无法与在管理员用户下运行的其他 WCF 服务通信 我读到您无法在不同用户之间使用 net pipe 进行通信 有办法绕过它吗 我读到您无法在之间使用 net pi
  • NSURLConnection 进度条与 sendAsynchronousRequest Objective-C

    我正在使用以下方法下载一堆较大的 zip 文件 这可能需要一段时间 所以我想显示一个进度条 我研究了如何使用 NSURLConnection 的委托方法 它看起来很简单 但是我想通过 sendAsynchronousRequest 实现同样
  • 在 SQL Server 中加密/在 .Net 4 中解密

    我知道这可能是这个问题的重复 如何在 sql server 中加密数据并在 net 应用程序中解密 https stackoverflow com questions 3202011 how to encrypt data in sql s
  • 可以在不播放动画的情况下加载 gif 动画吗?

    我想知道是否有一种方法可以阻止浏览器实际对加载到 a 中的动画 gif 进行动画处理 img 标签 我只想让它显示 gif 的第一帧而不播放动画 我已经担心这是不可能的 我必须提取第一帧并将其渲染到画布上 这是一个有点昂贵的解决方案 但如果
  • 在 python 中加载预训练的手套向量

    我已经从互联网下载了预训练的手套矢量文件 它是一个 txt 文件 我无法加载和访问它 使用 gensim 加载和访问词向量二进制文件很容易 但我不知道当它是文本文件格式时该怎么做 手套模型文件采用词向量格式 您可以打开文本文件来验证这一点
  • 将 iTunes 中的图像同步到 iPhone 模拟器

    我想知道如何将 iTunes 中的图像同步到 iPhone 模拟器 这对我的 iOS4 有效 在模拟器上 单击 主页 然后单击 照片 图标 将图像从 Mac 拖到模拟器屏幕上 然后按照上面的说明操作 按住鼠标单击图像 直到弹出窗口出现 选择
  • 如何在运行时动态地将值传递给 ObjectDataProvider.MethodParameters

    我写了这段代码 public class CustomData public int F1 get set public int F2 get set public string F3 get set public class Retrie
  • 寻找用 AS3 编写的 CSS 解析器

    我需要在我的 Flex 应用程序中运行时加载并应用 CSS https stackoverflow com questions 204924 how do you dynamically load a css file into a fle
  • 为什么我在 Google Calendar API 中收到 (401) 未经授权的错误

    我一直在使用 Google Calendar API 但遇到了一些问题 当我在下面调用它时删除日历事件它在第一次通过时效果很好 通常在第二次时效果很好 然而 在我第二次或第三次调用这个方法时 我得到了一个 401 未经授权的错误 它每次都使
  • 打印文件中从匹配行到文件末尾的行

    我编写了以下 awk 来打印从匹配行到 EOF 的行 awk match line file 我怎样才能在 sed 中做同样的事情 sed n matched p file awk matched 0 file
  • 使用和不使用数组解码不同类型

    我正在尝试按如下方式解码错误 我正在以数组格式处理的大部分错误 String 但在少数情况下 错误不是数组格式 而是一个String 如果数组格式出现错误 名称为errors 但如果是字符串格式则为error 我该如何处理这种情况 我怎样才