ios - 通过 Codable 协议解析 JSON
问题描述
我以这种形式向 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 的形式提供给我,附在上面
解决方案
您收到以下格式的回复:
[ "allNews": (
{
key : value
},
{
key : value
}
)]
由于您的新闻数组位于 allNews 键中,因此您应该通过AllNews
struct 将您的响应解码为:
guard let newsData = try? JSONSerialization.data(withJSONObject: document.data(), options: []) else { return }
let allNews = try? JSONDecoder().decode(AllNews.self, from: newsData)
print(allNews)
推荐阅读
- python - 来自 url 的 Python ftech 标题和 pdf 链接
- python - Arduino加速度计到Python输出
- java - Android 10 上的 createTempFile() 权限被拒绝
- google-apps-script - 如何获取最后修改每个单元格的用户的电子邮件
- javascript - 使用 React-Transition-Group 和 Redux 正确渲染组件的问题
- laravel - Laravel 根据客户/用户/租户限制内容
- c# - 我应该同时处理位图及其克隆吗?
- laravel - 在表关系 Laravel 中插入值
- pandas - 关于某些组/数据,如何在熊猫数据框中删除行(数据)?
- django - Django Rest Framework:动态更改嵌套对象