使用可解码返回空模型解析 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】:

更新ResponseMessageHeader类型如下,

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的主要内容,如果未能解决你的问题,请参考以下文章

无返回时处理 JSON 解码错误

在 Swift iOS 中解码的 PHP JSON 返回空值

解析 json 数组在 swift 中返回空元素

Android - Jackson JSON 解析器在“发布”版本中返回空值

MVC3 & JSON.stringify() ModelBinding 返回空模型

json解析中,解析的名称key在json中不存在,会报错吗,还是返回空对象