如何在 Swift 中加载远程 JSON 文件?
Posted
技术标签:
【中文标题】如何在 Swift 中加载远程 JSON 文件?【英文标题】:How do I load a remote JSON file in Swift? 【发布时间】:2022-01-16 02:35:39 【问题描述】:我几乎是 Swift 的初学者。我已经玩过 SwiftUI 了,但仅此而已。不用说,我不知道类、结构、协议和其他一切在 Swift 中是如何工作的。
我目前正试图弄清楚如何将 JSON 文件加载到 Swift 中,但我一辈子都无法让它工作。我认为这样的东西对于这样一种现代语言来说是相当初级的,但显然不是。在尝试了多个教程和示例之后,我想出了这个凌乱的代码:
public class JSONReader
struct DatabaseObject: Decodable
let name: String
let books: AnyObject
let memoryVerses: AnyObject
private func parse(jsonData: Data)
do
let decodedData = try JSONDecoder().decode(DatabaseObject.self, from: jsonData)
print(decodedData)
catch
print("decode error")
private func loadJson(fromURLString urlString: String,
completion: @escaping (Result<Data, Error>) -> Void)
if let url = URL(string: urlString)
let urlSession = URLSession(configuration: .default).dataTask(with: url) (data, response, error) in
if let error = error
completion(.failure(error))
if let data = data
completion(.success(data))
urlSession.resume()
init()
loadJson(fromURLString: "Redacted for privacy") result in
switch result
case .success(let data):
self.parse(jsonData: data)
case .failure(let error):
print(error)
我不断收到构建时错误Type 'JSONReader.DatabaseObject' does not conform to protocol 'Decodable'
任何帮助、指示或提示将不胜感激!
【问题讨论】:
如果您询问有关解析 JSON 的问题,最好包含一个包含您打算解析的 JSON 示例的块。这样我们就可以引导您找到适合您数据的数据结构。 【参考方案1】:AnyObject
类型不能被 swift 解码,您尝试解码的 books 属性和 memoryVerse 是不可解码的,如果您想解码它,您可以将它们的类型分别定义为像这样的可编码结构
struct Book : Codable
let property : String
let otherProperty : String
struct Memory : Codable
let property : String
let otherProperty : String
struct DatabaseObject: Decodable
let name: String
let books: Book
let memoryVerses:Memory
【讨论】:
明白了!所以我基本上也需要对每个对象属性进行严格的处理。谢谢!我回家后会试试看,并确保将您标记为正确!以上是关于如何在 Swift 中加载远程 JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 3 中加载带有 HTML 的 CSS 文件?
如何在 Xcode 中加载本地 json 文件以进行单元测试?