使用可解码返回空模型解析 JSON
Posted
技术标签:
【中文标题】使用可解码返回空模型解析 JSON【英文标题】:Parse JSON with Decodable return empty Model 【发布时间】:2019-08-27 05:41:08 【问题描述】:我正在尝试加载本地 JSON
文件并使用符合 Decodable
协议的模型进行解析。
JSON 文件:
[
"body": ,
"header":
"returnCode": "200",
"returnMessage": "Successfully Received",
]
响应消息模型:
struct ResponseMessage: Decodable
struct header: Decodable
let returnCode: String
let returnMessage: String
模拟 API 实现:
let url = Bundle.main.url(forResource: "MockJSONData", withExtension: "json")!
do
let data = try Data(contentsOf: url)
let teams = try JSONDecoder().decode(ResponseMessage.self, from: data)
print(teams)
catch
print(error)
但响应消息为此返回空数据。
感谢您的帮助和建议!
谢谢
【问题讨论】:
你的 JSON 是一个数组,所以它应该是decode([ResponseMessage].self
,而它缺少 struct ResponseMessage: Decodable let header: header
。顺便说一句,用大写字母写struct Header: Decodable
,然后写struct ResponseMessage: Decodable let header: Header
【参考方案1】:
更新ResponseMessage
和Header
类型如下,
struct ResponseMessage: Decodable
var header: Header
struct Header: Decodable
let returnCode: String
let returnMessage: String
和decode
这样,
do
let data = try Data(contentsOf: url)
let teams = try JSONDecoder().decode([ResponseMessage].self, from: data)
print(teams.first!.header.returnMessage)
catch
print(error)
【讨论】:
以上是关于使用可解码返回空模型解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift iOS 中解码的 PHP JSON 返回空值
Android - Jackson JSON 解析器在“发布”版本中返回空值