json - 使用 Swift 从 JSON 中仅提取一些字段

标签 json swift api codable decodable

<分区>

对不起,我是 Swift 编程的新手。我正在使用 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.\r\n\"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.\r\n23 with 20 posters participating\r\nArtist 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。定义你的模型

定义模型时,您可以只声明您感兴趣的字段。

Since in a comment below you said you only want author and title for each Article I updated the Article struct accordingly.

struct Response: Decodable {

    let articles: [Article]

    struct Article: Decodable {
        let author: String
        let title: String
    }
}

2。解码

do {
    let response = try JSONDecoder().decode(Response.self, from: data)
    let articles = response.articles
    print(articles)
} catch {
    print(error)
}

关于json - 使用 Swift 从 JSON 中仅提取一些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885046/

相关文章:

python - 监控 JSON 有线协议(protocol)日志

html - angularjs:依赖于json数据的动态html

swift - Tensorflow 中张量的可微积

rest - 在 Ubuntu/Centos 上部署并运行 Go API 服务器

c++ - 使用 C++ 在 Windows 中输入笔

c# - 我如何从 AtTask 下载文档?

ios - PSCollectionView 调用委托(delegate)

ios - Swift UI 测试 - XCTAssertEqual 有错误的行为

swift - 在没有 UINavigationController 的情况下使用 Alert 推送 UIViewController

ios - 使用 Swift 3 的核心数据指南