簡體   English   中英

Swift 4可解碼的json數組

[英]Swift 4 decodable json arrays

所以我現在正在研究一個解析底部鏈接的JSON Api的程序

當我運行代碼時,我得到一些輸出,但不是全部 控制台輸出的圖像

主要是為可選類型的動漫,這是好的,因為它表明它的工作,但我也想訪問名稱和發布日期和語言,但我不知道如何在swift 4中使用這樣的JSON數組。我會附上我的目前的代碼如下。

import UIKit

struct AnimeJsonStuff: Decodable {
    let data: [AnimeDataArray]
}

struct AnimeDataArray: Decodable {
    let type: String?
}

class OsuHomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
    func jsonDecoding() {
        let jsonUrlString = "https://kitsu.io/api/edge/anime"

        guard let url = URL(string: jsonUrlString) else {return} //
        URLSession.shared.dataTask(with: url) { (data, response, err) in

            guard let data = data else {return}

            do {
                let animeJsonStuff =  try JSONDecoder().decode(AnimeJsonStuff.self, from: data)
                print(animeJsonStuff.data)

                let animeDataArray = try JSONDecoder().decode(AnimeDataArray.self, from: data)
                print(animeDataArray.type as Any)
            } catch let jsonErr {
                print("Error serializing json", jsonErr)
            }
        }.resume()
    }
}

之后我有更多的代碼,但它只是用於設置自定義collectionViewCells。

這里也是api的鏈接

標題為“Swift 4 decodable json arrays”的回答

let decoder = JSONDecoder()
do {
   let array = try decoder.decode([YouCodableStruct].self, from: response.data!)
   debugPrint(array)
} catch {
   debugPrint("Error occurred")
}

http://andrewmarinov.com/parsing-json-swift-4/

請檢查以下內容:

我不會為所有鑰匙添加。 我添加了一些attributes

struct AnimeJsonStuff: Decodable {
    let data: [AnimeDataArray]
}

struct AnimeLinks: Codable {
    var selfStr   : String?

    private enum CodingKeys : String, CodingKey {
        case selfStr     = "self"
    }
}
struct AnimeAttributes: Codable {
    var createdAt   : String?

    private enum CodingKeys : String, CodingKey {
        case createdAt     = "createdAt"
    }
}
struct AnimeRelationships: Codable {
    var links   : AnimeRelationshipsLinks?

    private enum CodingKeys : String, CodingKey {
        case links     = "links"
    }
}

struct AnimeRelationshipsLinks: Codable {
    var selfStr   : String?
    var related   : String?

    private enum CodingKeys : String, CodingKey {
        case selfStr     = "self"
        case related     = "related"
    }
}

struct AnimeDataArray: Codable {
    let id: String?
    let type: String?
    let links: AnimeLinks?
    let attributes: AnimeAttributes?
    let relationships: [String: AnimeRelationships]?

    private enum CodingKeys: String, CodingKey {
        case id = "id"
        case type = "type"
        case links = "links"
        case attributes = "attributes"
        case relationships = "relationships"
    }
}

Json解析:

func jsonDecoding() {
    let jsonUrlString = "https://kitsu.io/api/edge/anime"

    guard let url = URL(string: jsonUrlString) else {return} //
    URLSession.shared.dataTask(with: url) { (data, response, err) in
        guard let data = data else {return}
        do {
            let animeJsonStuff =  try JSONDecoder().decode(AnimeJsonStuff.self, from: data)
            for anime in animeJsonStuff.data {
                print(anime.id)
                print(anime.type)
                print(anime.links?.selfStr)
                print(anime.attributes?.createdAt)
                for (key, value) in anime.relationships! {
                    print(key)
                    print(value.links?.selfStr)
                    print(value.links?.related)
                }
            }
        } catch let jsonErr {
            print("Error serializing json", jsonErr)
        }
    }.resume()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM