当前位置: 首页 > 面试题库 >

Swift 4 Codable;如何使用单个根级密钥解码对象

阎昌勋
2023-03-14
问题内容

我正在使用Codable带有JSON数据的Swift 4 协议。我的数据经过格式化,以使得在根级别只有一个键,并且包含一个包含我所需属性的对象值,例如:

{
  "user": {
    "id": 1,
    "username": "jdoe"
  }
}

我有一个User可以解密user密钥的结构:

struct User: Codable {
  let id: Int
  let username: String
}

由于idusername是的属性user,而不是根目录级别,因此我需要制作一个包装器类型,如下所示:

struct UserWrapper: Codable {
  let user: User
}

然后,我可以通过解码JSON
UserWrapper,也User可以解码。似乎有很多冗余代码,因为我在每种类型上都需要一个额外的包装。有没有办法避免这种包装模式,或更正确/优雅的方式来处理这种情况?


问题答案:

您可以使用字典进行解码:用户组合然后提取出用户对象。例如

struct User: Codable {
    let id: Int
    let username: String
}

let decoder = JSONDecoder()
let userDictionary = try decoder.decode([String: User].self, from: jsonData)


 类似资料:
  • 问题内容: 按照本教程,我将使用flexiprovider基于椭圆曲线的不对称算法进行加密/解密。稍作修改,我将出于个人目的将公共密钥和私有密钥转换为Base64(例如存储到数据库或文本文件中)。但是我的代码不是在android设备中运行的,而在Java设备中运行的是dekstop,不是Java中的android和dekstop版本,我认为这是一个很大的差异(只是为了清理我的问题信息)。好的,在我

  • 这是可能的还是加密必须共享和使用相同的密钥? 主要目的就是这样。 我将有两个客户端可以发送和接收加密数据到彼此。

  • 我想得到的是 使用libnail加密密码salt 我有一个列表的盐,我想用它来加密/解密我的密码。当我加密密码时,我得到一个哈希返回,这样一个似乎可以工作,但在解密时,我总是得到假返回值。 我是否使用了错误的方法对libnaude进行加密/解密,还是完全朝着错误的方向行驶? 我的加密/解密源: 我感谢任何帮助! 多姆

  • 我正在尝试找到一种使用私钥加密字符串并使用公钥解密它的方法。我使用OpenSSL生成密钥,如下所述: http://www.akadia.com/services/ssh_test_certificate.html 这就是我目前拥有的 然而,在< code>ImportPublicKey方法上,我得到一个异常< code>ASN1损坏数据 传递给该方法的字符串具有以下格式: @“MIICXWIBA

  • 我无法使用keytool(java 8)更改PKCS密钥库密码。当我试图更改密钥密码时: 这意味着无法更改PKCS12密钥库的密钥密码。然后我尝试更改keystore密码: 这意味着,我们必须一起更改密钥库密码和密钥密码。但是没有命令可以改变两者。我能做什么呢?

  • 问题内容: 我需要用openssl生成的和密钥替换从Unix到Java代码的加密和解密步骤 我生成密钥 我在Unix中使用键(我需要在Java中执行) 这是我的尝试 但它不起作用,PKCS8EncodedKeySpec / X509EncodedKeySpec不正确…但是我不知道该放什么 问题答案: 我认为您在读取PEM文件时遇到问题。JPA不直接支持PEM格式。您有两种选择,要么将它们转换为DE