我如何exctract Json Data swift

时间:2018-06-08 07:04:07

标签: ios swift swift4 fetch-api

您好我一直在使用youtube api并且我获取了看起来像这样的api,我已经设法通过使用解码器获取标题和描述我的结构如何我在下面做了

`{
kind: "youtube#videoListResponse",
etag: "\"DuHzAJ-eQIiCIp7p4ldoVcVAOeY/afeay36Ls6JJ-W_ngFTxbc2s6Pw\"",
pageInfo: {
totalResults: 1,
resultsPerPage: 1
},
items: [
{
kind: "youtube#video",
etag: "\"DuHzAJ-eQIiCIp7p4ldoVcVAOeY/6vv0LQwRyqqns6JEgC-Gg86wBZk\"",
id: "7lCDEYXw3mM",
snippet: {
publishedAt: "2012-06-20T23:12:38.000Z",
channelId: "UC_x5XG1OV2P6uZZ5FSM9Ttw",
title: "Google I/O 101: Q&A On Using Google APIs",
description: "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.",
`

这是我的结构

struct Videos: Decodable {
            let items: [item]

        }

        struct item: Decodable {
            let snippet: snippet
        }

        struct snippet: Decodable {
            let title: String
            let description: String
            let thumbnails: thumbnails

        }

        struct thumbnails: Decodable {
            let `default`: defal
        }

        struct defal: Decodable {
            let url: String
        }

这里是我如何获取我使用的URLSession我没有包含所有的获取代码,因为它会很多,但仍然可以看到我通过使用for语句打印标题,这很有效,因为在终端我可以看到标题。

        guard let data = data else { return }
            do {
                let decoder = JSONDecoder()
                let data = try decoder.decode(Videos.self, from: data)


                for item in data.items {
                    guard let title: String = item.snippet.title else { return }

                    print(title)
                }

我希望我的单元格使用我之前声明的标题但是当我尝试这样做时标题突然为零,但在获取块中它具有我正在寻找的值。

        print(title)
        cell.textLabel?.text = title

我的问题是如何提取标题和描述以及所有这些内容,以便我的单元格可以使用它,我不确定我使用的获取结构是否正确任何查找结构的反馈以及如何提取数据,以便我的细胞可以使用它非常有帮助,我非常感激

1 个答案:

答案 0 :(得分:0)

    struct item: Codable {

        let publishedAt: String
        let channelId: String
        let title: String
        let description: Int

        private enum CodingKeys: String, CodingKey {
            case publishedAt = "publishedAt"
            case channelId = "channelId"
            case title = "title"
            case description = "description"
        }
    }


    struct Videos: Decodable {

        let results: [item]

        private enum CodingKeys: String, CodingKey {
            case results = "items"

        }
    }

    // for parsing 
     let itemsArray =  try JSONDecoder().decode(Videos.self, from: json.rawData(options: .prettyPrinted))

 // in cell for row

let title = itemsArray[indexPath.row].title