从具有特定结构的 json 解码数据时出现问题
Posted
技术标签:
【中文标题】从具有特定结构的 json 解码数据时出现问题【英文标题】:Problem decoding data from json with a specific structure 【发布时间】:2021-07-08 18:26:25 【问题描述】:我正在尝试解码此响应数据:
"headers": ,
"original":
"code": 201,
"success": true,
"message": "Message"
,
"exception": null
使用这个结构:
struct MarcaAguaResData: Codable
let original: Marca
struct Marca: Codable
let code: Int
let success: Bool
let message: String
我只关心原创内容。使用我正在实现的代码,使用 JSONDecoder,我得到了这个错误:
failure(Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "code", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "No value associated with key CodingKeys(stringValue: \"code\", intValue: nil) (\"code\").", underlyingError: nil)))
【问题讨论】:
我无法通过简单的复制和粘贴来确认这一点。但是,我可以看到您的 json 格式不正确("success": true
之后缺少逗号)。它与错误不匹配,但您可以考虑更正它
那是我的错误。我更正了问题
问题基本上是:我应该使用什么结构来解码 JSON 数据?
您提供的结构适合解码您提供的 json。错误必须是另一个错误
你的 json 响应中有一个元素还是多个元素?
【参考方案1】:
首先让我说您提供的 JSON 和您提供的 Codable 工作正常。
但是,当您收到此特定错误时:
failure(Swift.DecodingError.keyNotFound(CodingKeys(stringValue: "code", intValue: nil), Swift.DecodingError.Context(codingPath: [_JSONKey(stringValue: "Index 0", intValue: 0)], debugDescription: "没有与键 CodingKeys 关联的值(stringValue: "code", intValue: nil) ("code").", underlyingError: nil)))
这只是意味着你的服务器没有发送你一直期待的 JSON,所以基本上在这个错误中你的服务器正在向你发送这种 JSON:
"headers": ,
"original":
"success": true,
"message": "Message"
,
"exception": null
“代码”在 JSON 中完全缺失。
如果您在结构中将 code
标记为可选,则可以避免出现错误并且仍然可以让您的代码正常工作:
struct Marca: Codable
let code: Int?
let success: Bool
let message: String
【讨论】:
以上是关于从具有特定结构的 json 解码数据时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 FFmpeg API 加载 G.729 解码器时出现问题