斯威夫特4个解码JSON数组

问题描述:

所以我目前沃金上的程序来解析其在底部斯威夫特4个解码JSON数组

联当我运行的代码中,我得到一些输出,但不是所有的image of console output

主要表现为一个JSON阿比可选类型的动画这是很好的,因为它表明它的工作原理,但我也想访问名称和发布日期和语言,但我不知道如何在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

+1

有什么问题吗?此外,如果这是关于解析特定的JSON字符串,请粘贴字符串_into您的问题_;不要显示代码图片,这没有任何好处。 – matt

请检查以下内容:

我din't添加了所有的按键。我添加了一些在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() 
} 
+0

非常感谢,这个作品! – Dengekiko

回答标题 “雨燕4个解码JSON数组”

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/