【问题标题】:Parse JSON via Codable protocol通过 Codable 协议解析 JSON
【发布时间】:2019-07-16 08:34:54
【问题描述】:

我有一个 Firebase 的答案,格式如下:

    ["allNews": <__NSArrayM 0x6000015f06c0>(
{
    createDate = "21.02.19";
    creator = "lol@gmail.com";
    creatorImageURL = "<null>";
    creatorUID = kzorlyIOI3RgEjCV1XDLQUhu5CS2;
    newsImageURL = "";
    text = "Daft g s dfg ";
    title = "Test ";
},
{
    createDate = "21.02.19";
    creator = "plol2@gmail.com";
    creatorImageURL = "<null>";
    creatorUID = Tw1JzFzcVbelRUA7GoFZ9CIWIwr1;
    newsImageURL = "";
    text = Vcbccvbvb;
    title = hdbdvbccfb;
}
)
]

如何通过 Codable 协议解析它?

下面是我的代码:

struct AllNews: Codable {
    var allNews: [DetailNews]
}

struct DetailNews: Codable {
    var creator: String
    var creatorUID: String
    var title: String
    var text: String
    var createDate: String
    var creatorImageURL: String
    var newsImageURL: String
}

这就是我解析数据的方式

guard let newsData = try? JSONSerialization.data(withJSONObject: document.data(), options: []) else { return }
let decodeJSON = JSONDecoder()

let allNews = try? decodeJSON.decode([DetailNews].self, from: newsData)
print(allNews)

但是 allNews 仍然为零,尽管新闻数据以 json 的形式出现在我这里,并附在上面

【问题讨论】:

  • 您在这里收到的错误信息是什么?还要添加使用 JSON 解码器解析的代码
  • 在此处粘贴您的 JSON,它会尝试为您执行此操作 app.quicktype.io/?l=swift
  • creatorImageURL 和 newsImageURL 需要是可选的String?
  • 永远不要忽略 Decoding 错误。 catch 错误,阅读描述性错误信息并立即修复。
  • 按照我在答案中所做的那样捕获错误并发布其输出

标签: ios json swift codable


【解决方案1】:

您收到的响应格式为:

[ "allNews": (
    {
        key : value
    },
    {
        key : value
    }
)]

由于您的新闻数组位于 allNews 键中,因此您应该传递 AllNews 结构来将您的响应解码为:

guard let newsData = try? JSONSerialization.data(withJSONObject: document.data(), options: []) else { return }
let allNews = try? JSONDecoder().decode(AllNews.self, from: newsData)
print(allNews)

【讨论】:

    【解决方案2】:

    这应该可以帮助您解析数据

    let value = response.data
    
    do {
        let allValues = try JSONDecoder().decode([DetailNews].self, from: value)
    } catch let error {
         print(error)
    }
    

    确保值是数据类型

    【讨论】:

    • 为什么投反对票?这家伙清楚地问(在编辑之前)“我如何通过 Codable 协议解析它?”。答案告诉你如何使用 Codable Protocol 进行解析
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    相关资源
    最近更新 更多