Swift 如何打印JSON文件中的任何内容?

Swift 如何打印JSON文件中的任何内容?,swift,Swift,我读取本地JSON文件的函数有问题。当我想在parseJson()中打印任何内容时,控制台中不会显示任何内容 这是我的JSON文件: { "questions":[ { "question": "First Question ???", "response": "First Response", }, { "question": "Second Question ???", "

我读取本地JSON文件的函数有问题。当我想在parseJson()中打印任何内容时,控制台中不会显示任何内容

这是我的JSON文件:

{
  "questions":[
      {
          "question": "First Question ???",
          "response": "First Response",
      },
      {
          "question": "Second Question ???",
          "response": "Second Response",
      }
  ]
}  
这是我的问题结果,斯威夫特

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)")
                }
            }
        }
    }
}

你能帮我吗?

假设你
var
声明你的
问题

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)")
    }
}

代码中的主要问题是您是否添加了代码
var questionsJson=[Questions]()
应声明为视图控制器的属性。将其移出viewDidLoad方法以及
func parseJSON()
方法。您处理
questionjson object
和parseJSON方法的方式只存在于viewDidLoad方法中,一旦方法完成,它们就会超出范围

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



我看到了一些问题,
questionsJson
被声明为不可变的,并且您的函数将
数据
对象作为参数,但您也正在从主包中读取一个文件。此外,该错误看起来像是编译错误,是吗?
问题result.self
感谢您的回答!我已经更新了代码,没有任何错误。但当我想打印JSON中的内容时,控制台中不会显示任何内容。你知道为什么吗?@Galnash,不知道。我建议您使用调试器来验证是否找到了资源(或者也可以使用print语句),将其移出
viewDidLoad
方法以及
func parseJSON()
method@LeoDabus伟大的这就是现在的工作!谢谢你的回答和时间!
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()
    }
}