Как проанализировать данные из локального файла JSON и сохранить в классе модели и использовать в табличном представлении - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу проанализировать JSON из локального файла JSON и хочу сохранить эти данные в классе модели и показать их в виде таблицы. как я могу разобрать 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 из локального файла

1 Ответ

0 голосов
/ 13 ноября 2018

Исправьте структуру и класс json для TeamData

Измените свой класс TeamData, чтобы он соответствовал вашему json

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

для команды "Челси" вы забыли поместить матч в массив, поэтому исправьте это так:

[{
     "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 вашего файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...