首页 > 解决方案 > 在 Swift 中解析 JSON 24 小时的问题

问题描述

我现在完成这个项目的精力和时间都很有限,我已经尽我所能来学习、理解和实施一个没有成功的解决方案,我真的很想得到一些帮助。有人对实施解决方案有任何想法吗?

我真的很难在 Swift 中将 json 文件解析到我的 iOS 应用程序中。我有一个来自 SQL 数据库的 JSON 输出。我认为格式错误并且数据标题有点模棱两可,但我聘请来创建流程的开发人员对输出感到满意。下方链接。

所以在过去的 3 天里,我阅读了所有关于解析 JSON 的 Apple Developer 材料,还观看了许多教程,它们都涵盖了几乎相同的数据,我不知道我已经阅读了多少并将其转换为具有都失败了。我真的需要一些指导。我什至拼命尝试从不同的角度理解我的问题,我已经研究了它是如何用其他语言完成的。这是最新的迭代:

导入 UIKit 导入基础

struct ScheduleList: Codable {
let data: [Datum]

enum CodingKeys: String, CodingKey {
    case data = "data"
  }
}

struct Datum: Codable {
let date: String
let message: String
let notice: String

enum CodingKeys: String, CodingKey {
    case date = "date"
    case message = "message"
    case notice = "notice"
  }
}

class VCMainViewController: UIViewController {

@IBOutlet weak var flightTable: UITableView!

@IBOutlet weak var date: UILabel!

@IBOutlet weak var route: UILabel!

@IBOutlet weak var std: UILabel!

@IBOutlet weak var sta: UILabel!

@IBOutlet weak var pax: UILabel!


let flight = [Datum]()

func parse() {
    let jsonUrlString = "http://35.237.114.234/api/index.php?uid=Bx7faf08A9fYJ7bZCNMUX9EzxYN2"

    guard let url = URL(string: jsonUrlString) else { return }

    let task = URLSession.shared.scheduleListTask(with: url) { (scheduleList, response, error) in

        guard let scheduleList = scheduleList, error == nil, response != nil else {
            print("Something Wrong")
            return
        }
        print("downlaoded")

        do {
            let decoder = JSONDecoder()
//Error Here: Cannot convert value of type 'ScheduleList' to expected argument type 'Data'
            let downloadedFlights = try decoder.decode([scheduleList], from: scheduleList)
            self.flight = downloadedFlights.date
        } catch {
            print("Something wrong after loading")
        }

    }
//I find I can print data / scheduleList here and it still returns correct data. So something above I guess is the problem.
    task.resume()

    /*
        if scheduleList != nil {
                 print(scheduleList!)
        } else {
            print(error)
        }
     }
    */

}


override func viewDidLoad() {
    super.viewDidLoad()

    parse()

}

}

**由于原始帖子的问题,现在添加了完整的 JSON 文件。

我认为结构是问题。有什么建议我哪里出错了吗?我不能将其转换为 Data,dataTask 数据称为 scheduleList,所以我不知道为什么它不接受它。

谢谢

标签: iosjsonswiftparsing

解决方案


只需将最后两个字符从 更改],]},您将获得有效的 JSON。

它甚至可能工作:)

如果没有,请发回确切的错误消息,以及失败所在的行。

再一次,有一个方便的 JSON 格式化程序/浏览器/验证器是很好的。我通常使用 Notepad++ 插件。这是一个很好的在线浏览器:

JSON 格式化程序和验证程序

也可以看看:

Stack Overflow:如何创建一个最小、完整和可验证的示例


推荐阅读