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