【问题标题】:Decoding Error -- Expected to decode Dictionary<String, Any> but found an array instead解码错误 - 应解码 Dictionary<String, Any> 但找到了一个数组
【发布时间】:2021-09-23 13:27:22
【问题描述】:

我是 swift 编程和 Xcode 的新手,我尝试使用 Json 编码将 mysql 数据从数据库调用到 Xcode。我能够成功调用所有数据(数组),但是当我决定只调用一个值(列)说 Courses.name 时,我得到“解码错误 - 预期解码字典但找到了一个数组”。我该如何解决这个问题?我的目标是只打印 course.name

import UIKit

struct Course: Decodable {
let id: String
let name: String
let member:  String

 }

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    let jsonUrlString = "http://oriri.ng/aapl/service.php"
    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 courses = try JSONDecoder().decode(Course.self, from: data)
            print(courses.name)


        } catch let jsonErr {
            print("Error serializing json:", jsonErr)
        }

    }.resume()

   }
}

【问题讨论】:

    标签: json swift xcode


    【解决方案1】:

    [{"id":"1","name":"sobande_ibukun","member":"blue"}]

    [] 周围表示它是一个数组。使用以下内容解码,它应该可以工作:

    let courses = try JSONDecoder().decode([Course].self, from: data)
    

    如果你确定它永远是你可以做的一门课程:

    print(courses.first!.name)
    

    如果可能有很多课程,您可以打印每个名称:

    courses.forEach { course in print(course.name) }
    

    【讨论】:

    • 谢谢,但我收到另一个错误“'[Course]' 类型的值没有成员'name'”并且它无法构建
    • @JamiuMomoh 更新了答案以反映这一点。一系列课程都有元素。您必须访问数组中的特定元素才能在其上调用.name。
    • 是的!这将永远是一门课程,因为我将使用 mysql 语句限制结果。非常感谢,我花了好几个小时努力解决它。按预期工作。
    • 不工作。得到错误:错误:无法将类型“[Course.Type]”的值转换为预期的参数类型“T.Type”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多