用解码器Swift的init解码JSON
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用解码器Swift的init解码JSON相关的知识,希望对你有一定的参考价值。
我正在我的应用中使用NewsAPI。他们的回复格式如下:
{
"status": "ok",
"totalResults": 38,
"articles": [
{
"source": {
"id": "cnn",
"name": "CNN"
},
"author": "Eric Levenson and Lauren del Valle, CNN",
"title": "Actress Annabella Sciorra is in court at Harvey Weinstein's trial for potential testimony - CNN",
"description": "Actress Annabella Sciorra is in court for Harvey Weinstein's criminal trial, setting up what could be the first face-to-face testimony from one of the women who has accused him of sexual assault.",
"url": "https://www.cnn.com/2020/01/23/us/harvey-weinstein-annabella-sciorra/index.html",
"urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/200123090608-annabella-sciorra-file-super-tease.jpg",
"publishedAt": "2020-01-23T16:22:00Z",
"content": "New York (CNN)Actress Annabella Sciorra is in court for Harvey Weinstein's criminal trial, setting up what could be the first face-to-face testimony from one of the women who has accused him of sexual assault.
"The Sopranos" actress has said Weinstein raped … [+5398 chars]"
},
{
"source": {
"id": "ars-technica",
"name": "Ars Technica"
},
"author": "Jennifer Ouellette",
"title": "Jewel beetle’s bright colored shell serves as camouflage from predators - Ars Technica",
"description": "University of Bristol scientists offer first real evidence for a 100-year-old theory.",
"url": "https://arstechnica.com/science/2020/01/study-jewel-beetles-use-iridescence-for-camouflage-not-sexual-selection/",
"urlToImage": "https://cdn.arstechnica.net/wp-content/uploads/2020/01/beetleTOP-760x380.jpg",
"publishedAt": "2020-01-23T16:00:00Z",
"content": "Enlarge/ The brightly colored shell of this jewel beetle is a surprisingly effective form of camouflage, according to a new study by scientists at the University of Bristol.
23 with 20 posters participating
Artist and naturalist Abbott Handerson Thayer beca… [+5422 chars]"
}]
}
我有一种使用此数据的方法,但是它涉及太多不必要的结构/类。有没有办法将响应中的articles
数组解码为如下定义的结构Article
:
struct Article: Decodable {
let author: String?
let title: String?
let description: String?
let url: String?
let urlToImage: String?
let publishedAt: String?
}
谢谢您的时间:)
答案
是,您只能获取您感兴趣的部分。
1。定义模型
struct Response: Decodable {
let articles: [Article]
struct Article: Decodable {
let author: String
let title: String
let description: String
let url: URL
let urlToImage: URL
let publishedAt: String
}
}
[请注意,我更新了您的Article结构,使字段变为非可选。如果API文档将这些字段定义为可选字段,请还原为您的版本。我也将
URL
类型用于几个字段,因为它感觉更正确。
2。解码
do {
let response = try JSONDecoder().decode(Response.self, from: data)
let articles = response.articles
print(articles)
} catch {
print(error)
}
以上是关于用解码器Swift的init解码JSON的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 使用 init 初始化模型对象(来自解码器:)