gpt4 book ai didi

arrays - 序列化错误

转载 作者:行者123 更新时间:2023-11-30 11:27:22 28 4
gpt4 key购买 nike

当我尝试继续解析 JSON 时收到此错误。有谁知道我需要做什么来解决它?

Error 1: Cannot subscript a value of type 'AudiobookJSON' (aka 'Array<Dictionary<String, Any>>') with an index of type 'String'

Error on Print

文件模型:Audiobook.swift:

import Foundation


struct Audiobook : Codable {
let id: Int
let descricao: String
let urlImagem: String

init(dictionary: AudiobookJSON) {
self.id = dictionary["id"] as! Int//////ERROR MESSAGE ////////
self.descricao = dictionary["descricao"] as! String/////ERROR MESSAGE
self.urlImagem = dictionary["urlImagem"] as! String////ERROR MESSAGE
}

}

文件夹网络:APIClient.swift:

import Foundation

typealias AudiobookJSON = [[String: Any]]

struct APIClient {

static func getAudiobooksAPI(completion: @escaping ([Audiobook]?) -> Void) {

let url = URL(string: "https://alodjinha.herokuapp.com/categoria")

let session = URLSession.shared

guard let unwrappedURL = url else { print("Error unwrapping URL"); return }

let dataTask = session.dataTask(with: unwrappedURL) { (data, response, error) in

guard let unwrappedDAta = data else { print("Error unwrapping data"); return }

do {

//let json = try JSONSerialization.jsonObject(with: unwrappedDAta, options: .allowFragments) as! [String:Any]
//let posts = json["data"] as? AudiobookJSON
let posts = try JSONDecoder().decode([Audiobook].self, from: unwrappedDAta)

print(posts)



completion(posts)

} catch {
print("Could not get API data. \(error), \(error.localizedDescription)")
}
}
dataTask.resume()
}
}

最佳答案

正如我所见,AudiobookJSON 是一个键值对数组,这就是您收到错误的原因:因此您必须使用这样的可编码:

首先:你必须像这样创建可编码类型结构(你的可编码结构变量名称应该与你得到的响应相同):

struct Audiobook: Codable {
let id: Int?
let descricao: String?
let urlImagem: String?

}

第二:当你得到响应时,然后直接使用 codale 进行解析,如下所示:

guard let unwrappedDAta = data else { print("Error unwrapping data"); return }

do {

let posts = try JSONDecoder().decode([Audiobook].self, from: unwrappedDAta)

print(posts)
completion(posts)

} catch let message {
print("JSON serialization error:" + "\(message)")
}

您可以直接使用响应,例如:

for audio in posts {
print("audio.id")
print("audio.descricao")
print("audio.urlImagem")
}

关于arrays - 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50591767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com