Как я могу напечатать что-нибудь в моем файле JSON? - PullRequest
0 голосов
/ 23 февраля 2019

У меня проблема с моими функциями для чтения локального файла JSON.Когда я хочу что-то напечатать в моем parseJson (), в моей консоли ничего не появляется.

Вот мой файл JSON:

{
  "questions":[
      {
          "question": "First Question ???",
          "response": "First Response",
      },
      {
          "question": "Second Question ???",
          "response": "Second Response",
      }
  ]
}  

Вот мои вопросыResult.swift

import Foundation

struct questionsResult: Decodable {
    var questions: [Questions]
}

struct Questions: Decodable {
    var question: String
    var response: String
}

И это моя функция в моем файле ViewController:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        var questionsJson = [Questions]()

        func parseJSON(){
            if let url = Bundle.main.url(forResource: "test", withExtension: "json") {
                do {
                    let data = try Data(contentsOf: url)
                    let decoder = JSONDecoder()
                    let jsonData = try decoder.decode(questionsResult.self, from: data)
                    questionsJson.append(contentsOf: jsonData.questions)
                    print(url)

                } catch {
                    print("Json error \(error)")
                }
            }
        }
    }
}

Можете ли вы помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Основная проблема в вашем коде - это то, где вы добавили свой код.var questionsJson = [Questions]() должно быть объявлено как свойство вашего контроллера представления.Переместите его из вашего метода viewDidLoad, а также из вашего метода func parseJSON().То, как вы сделали questionsJson object, и ваш метод parseJSON выходит только из вашего метода viewDidLoad, и они выйдут из области видимости, как только ваш метод завершит работу.

struct Root: Decodable {
    let questions: [Question]
}

struct Question: Decodable {
    let question: String
    let response: String
}

class ViewController: UIViewController {

    var questions: [Question] = []

    func parseJSON() {
        do {
            let url = Bundle.main.url(forResource: "test", withExtension: "json")!
            let decoder = JSONDecoder()
            questions = try decoder.decode(Root.self, from: Data(contentsOf: url)).questions
            for question in questions {
                print(question)
            }
        } catch {
            print(error)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        parseJSON()
    }
}
0 голосов
/ 23 февраля 2019

Если вы var объявляете свой questionsJson массив

var questionsJson = [Questions]()

, это должно работать, обратите внимание, я не использую никаких параметров, но считываю файл из основного пакета

if let url = Bundle.main.url(forResource: "test", withExtension: "json") {
    do {
        let data = try Data(contentsOf: url)
        let decoder = JSONDecoder()
        let jsonData = try decoder.decode(questionsResult.self, from: data)          
        questionsJson.append(contentsOf: jsonData.questions)
    } catch {
        print("Json error \(error)")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...