【问题标题】:Parse JSON with Decodable return empty Model使用可解码返回空模型解析 JSON
【发布时间】: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 }

标签: ios swift xcode jsonparser jsondecoder


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2021-01-14
    • 2018-09-27
    相关资源
    最近更新 更多