首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONDecoder找不到存在的密钥

JSONDecoder找不到存在的密钥
EN

Stack Overflow用户
提问于 2019-10-04 00:45:45
回答 1查看 122关注 0票数 1

当试图在Github的REST api中解析来自Create Team调用的响应时,JSONDecoder在解析存储库的许多蛇形大小写的密钥时失败。通过JSONSerialization解码时,可以毫无问题地找到所有密钥。

例如,在Xcode11.0 (11A420a)的Playground中运行时,使用JSONDecoder解码时解码失败。

代码语言:javascript
复制
import Foundation

let jsonData = """
{
"id": 12345,
"name": "swift",
"ssh_url": "git@github.com:apple/swift.git"
}
""".data(using: .utf8)!

struct ExampleModel: Codable {
    let id: Int
    let name: String
    let sshURL: String
}

let jsonObject = try! JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: Any]
print("JSONSerialization:", jsonObject["id"]!, jsonObject["name"]!, jsonObject["ssh_url"]!)

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let decodedObject = try! decoder.decode(ExampleModel.self, from: jsonData) // Fails here
print("JSONDecoder:", decodedObject.id, decodedObject.name, decodedObject.sshURL)

// Output:
//
// JSONSerialization: 12345 swift git@github.com:apple/swift.git
// Fatal error: 'try!' expression unexpectedly raised an error: Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "sshURL", intValue: nil), Swift.DecodingError.Context(codingPath: [], debugDescription: "No value associated with key CodingKeys(stringValue: \"sshURL\", intValue: nil) (\"sshURL\"), converted to ssh_url.", underlyingError: nil)): file MyPlayground.playground, line 22

我是否应该做一些不同的事情来解析这个值?

Swift版本:

代码语言:javascript
复制
Apple Swift version 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
Target: x86_64-apple-darwin19.0.0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-04 00:53:04

尝试将sshURL更改为sshUrlkeyDecodingStartegy会将sshURL转换为与您的密钥不匹配的ssh_URLsshUrl将被转换为与您的密钥匹配的ssh_url

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58223590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档