json - 如何从本地 JSON 文件解析数据并保存在模型类中并在 tableview 中使用

标签 json swift

我想从本地 JSON 文件解析 JSON,并想将该数据保存在模型类中并在 tableview 上显示。我如何从本地文件解析 JSON。

这是我的 JSON 文件 -- JsonFile.json

{
"teams":[
         {
         "teamName":"Arsenal",
         "image":"Arsenal",
         "nextMatch":"in 2 days",
         "matches":[
                    {
                    "oppositeTeam":"teamName",
                    "matchTimings":"121212",
                    "matchId":"ID 213432"
                    },
                    {
                    "oppositeTeam":"teamName",
                    "matchTimings":"121212",
                    "matchId":"ID 213432"
                    }
                    ],
         "fixtures":{
         "oppositeTeam":"teamName",
         "oppositeTeamScore":"7",
         "homeTeamScore":"4",
         "homeTeamCards":"True",
         "oppositeTeamCards":"false",
         "fixtureId":"ID 213432"
         }
         },
         {
         "teamName":"Chelsea",
         "image":"Chelsea",
         "nextMatch":"in 2 days",
         "matches":{
         "oppositeTeam":"teamName",
         "matchTimings":"121212",
         "matchId":"ID 213432"
         },
         "fixtures":{
         "oppositeTeam":"teamName",
         "oppositeTeamScore":"7",
         "homeTeamScore":"4",
         "homeTeamCards":"True",
         "oppositeTeamCards":"false",
         "fixtureId":"ID 213432"
         }
         },
         {
         "teamName":"India",
         "image":"India",
         "nextMatch":"in 2 days"
         }
         ]

这是我的模型类,我想在其中存储来自 JSON 文件的数据。

   class TeamData : Decodable{
let teamName : String
let image : String
let nextMatch : String?
let matches : [Match]
let fixtures : [Fixture]

class Match : Decodable{
let oppositeTeam : String?
let matchTimings : String?
let matchId : String?

class Fixture : Decodable{
let oppositeTeam : String?
let oppositeTeamScore : String?
let HomeTeamScore : String?
let HomeTeamCards : String?
let oppositeTeamCards : String?
let fixtureId : String?

现在如何从 JSON 文件解析数据并将其保存在模型类中。我已经看过很多教程,但每个教程都在使用 API,所以如何从本地文件解析 JSON 真的很令人困惑

最佳答案

修复 TeamData 的 json 结构和类

更改您的 TeamData 类以匹配您的 json

class TeamData: Decodable {
    var teamName : String
    var image : String
    var nextMatch : String?
    var matches : [Match]?
    var fixtures : Fixtures?
}

对于 Chelsea 队,您忘记将 match 放入数组,所以像这样修复它:

[{
     "oppositeTeam":"teamName",
     "matchTimings":"121212",
     "matchId":"ID 213432"
}]

我认为,如果您的 json 文件中只有 TeamData 对象数组,那将是最好的。所以,删除

{ “teams”:

} 最后,只保留团队数组

如何从json文件中获取json

在您的 ViewController 中的某处创建空的 TeamData 数组

 var teams = [TeamData]()

现在获取对您的 json 文件的引用,尝试从中创建数据并使用 JSONDecoder 解码该数据

let url = Bundle.main.url(forResource: "JsonFile", withExtension: "json")!
do {
    let data = try Data(contentsOf: url)
    teams = JSONDecoder().decode([TeamData].self, from: data)
} catch {
    print(error)
}

我还建议您将文件重命名为 Teams.json

也不要忘记在获取文件 URL 的行中重命名它

关于json - 如何从本地 JSON 文件解析数据并保存在模型类中并在 tableview 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278297/

相关文章:

ios - 更改自定义单元格内容 View 颜色

swift - swift 中的节点没有出现

swift - 选中时获取单元格标签文本

ios - UICollectionView.reloadData() 更改单元格顺序 | iOS swift

java - Spring Jackson反序列化和异常处理

javascript - 将 HTML 表格转换为 Json 文件

java - 更改 List<String> 的自定义适配器

ios - Swift 2 JSON 字节数组到 UIImage

python - Facebook 图形 Web API 未返回 JSON 格式的响应

ios - UICollectionView 是否随着 Xcode 7、swift 2.0 更改了协议(protocol)?