Swift 4 可解码的 json 数组
Posted
技术标签:
【中文标题】Swift 4 可解码的 json 数组【英文标题】:Swift 4 decodable json arrays 【发布时间】:2017-09-24 22:17:59 【问题描述】:所以我目前正在开发一个程序来解析底部链接的 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的链接
【问题讨论】:
有什么问题?此外,如果这是关于解析特定 JSON 字符串,请将字符串 粘贴到您的问题中;不要显示代码的图片,这对任何人都没有好处。 【参考方案1】:标题“Swift 4 decodeable 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/
【讨论】:
【参考方案2】:请检查以下内容:
我不会为所有键添加。我在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()
【讨论】:
以上是关于Swift 4 可解码的 json 数组的主要内容,如果未能解决你的问题,请参考以下文章
在 swift 4 和 Xcode 9 中解码 ExpandableTableView 的嵌套 json 数组
如何在 swift 4.1 和 xcode 9.3 中使用 JSONDecoder 解码嵌套的 JSON 数组和对象?