如何将我的结构保存为 Swift 中的 JSON 文件
How to save my struct as a JSON file in Swift
这是我要在报告中使用其变量的结构。
struct report : Codable {
var question : String
var AnswersChosen : [String] = [String]()
var userCount : Int
var hintCount : Int
我的用户输入报告,里面的变量是用户当前的问题,他们选择的选项以及他们每个问题选择错误答案的次数
var currentReport = [report]()
currentReport.append(report(question:questions[currentQuestion - 1 ],AnswersChosen:answerChosen, userCount:ActionCount, hintCount:hintButtonCount ))
print(currentReport)
这段代码的输出可以这样看:
在我的代码中,我使用 Alamofire 将 JSON 文件发送到 Laravel。我希望能够通过 Alamofire 发送将用户输入记录为 JSON 文件的 currentReport。因此,如何将数组转换为 JSON 文件?感谢您的帮助
您可以使用 JSONEncoder
:
的实例将数组编码为 Data
let encoder = JSONEncoder()
do {
let data = try encoder.encode(currentReport)
} catch {
print(error)
}
然后使用 write(to:options:)
函数将 Data
保存到文件中,如下所示:
do {
if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
url.appendPathComponent("reports.json")
try data.write(to: url)
}
} catch {
print(error)
}
完整的代码可能如下所示:
do {
let reports = [Report(question: "", userCount: 1, hintCount: 1)]
let data = try JSONEncoder().encode(reports)
if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
url.appendPathComponent("reports.json")
try data.write(to: url)
}
} catch {
print(error)
}
这是我要在报告中使用其变量的结构。
struct report : Codable {
var question : String
var AnswersChosen : [String] = [String]()
var userCount : Int
var hintCount : Int
我的用户输入报告,里面的变量是用户当前的问题,他们选择的选项以及他们每个问题选择错误答案的次数
var currentReport = [report]()
currentReport.append(report(question:questions[currentQuestion - 1 ],AnswersChosen:answerChosen, userCount:ActionCount, hintCount:hintButtonCount ))
print(currentReport)
这段代码的输出可以这样看:
在我的代码中,我使用 Alamofire 将 JSON 文件发送到 Laravel。我希望能够通过 Alamofire 发送将用户输入记录为 JSON 文件的 currentReport。因此,如何将数组转换为 JSON 文件?感谢您的帮助
您可以使用 JSONEncoder
:
Data
let encoder = JSONEncoder()
do {
let data = try encoder.encode(currentReport)
} catch {
print(error)
}
然后使用 write(to:options:)
函数将 Data
保存到文件中,如下所示:
do {
if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
url.appendPathComponent("reports.json")
try data.write(to: url)
}
} catch {
print(error)
}
完整的代码可能如下所示:
do {
let reports = [Report(question: "", userCount: 1, hintCount: 1)]
let data = try JSONEncoder().encode(reports)
if var url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
url.appendPathComponent("reports.json")
try data.write(to: url)
}
} catch {
print(error)
}