附加 JSON 数据 Swift
Posted
技术标签:
【中文标题】附加 JSON 数据 Swift【英文标题】:Appending JSON data Swift 【发布时间】:2020-01-23 03:04:02 【问题描述】:我目前正在从事一个学校项目,我需要能够读取、写入和查看 JSON 文件中的信息。对于我的任务,我正在尝试构建一个字典应用程序,您可以在其中添加自己的单词、定义等。
我一直在尝试将新数据写入 JSON 文件而不覆盖旧数据。 我在最后一行也有一个我感到困惑的错误。
这是我到目前为止的代码。
func fileUrl() -> URL
let documentURL = try!
FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
return documentURL.appendingPathComponent("data.json")
@IBAction func addWords(_ sender: UIButton)
if let oldWords:[[String : String]] = getJsonData() as [[String:String]]?
if let oldJson = try? JSONSerialization.data(withJSONObject: oldWords, options: [])
// Add old words to JSON file
let data: [String:String] = [
"Name": nameField.text ?? "N/A",
"Part of Speech": posField.text ?? "N/A",
"Definition": defView.text ?? "N/A"
]
let url = fileUrl()
if let jsonData = try? JSONSerialization.data(withJSONObject: data, options: [])
// Append data into JSON file
print(data)
nameField.text = ""
defView.text = ""
posField.text = ""
else
print("Failed to save")
func getJsonData() -> [[String:String]]?
let url = fileUrl()
let responseData: Data? = try! Data(contentsOf: url)
if let responseData = responseData
let json: String? = try? JSONSerialization.jsonObject(with: responseData, options: []) as? String
if let dictionary: [[String:String]]? = json as? [[String:String]]?
return dictionary
// Missing return in a function expected to return '[[String : String]]?' error
@IBAction func loadData(_ sender: UIButton)
let url = fileUrl()
let responseData: Data? = try! Data(contentsOf: url)
if let responseData = responseData
let json: Any? = try? JSONSerialization.jsonObject(with: responseData, options: [])
if let json = json
let dictionary: [String: Any]? = json as? [String: Any]
if let dictionary = dictionary
for names in dictionary
let name: String = dictionary["Name"] as! String
let definition: String = dictionary["Definition"] as! String
let pos: String = dictionary["Part of Speech"] as! String
print(name, definition, pos)
textView.text = ("Name: \(name) (\(pos))\n Definition: \(definition)\n ")
我一直在研究一种添加 JSON 数据的方法,但也许我已经盯着代码太久了,以至于我错过了一个简单的修复方法。
【问题讨论】:
【参考方案1】:swift 中没有原生方式,也没有第三方库将 json 对象附加到文件。
您需要做的是,当您调用 getJsonData
时,您将 JSON
的全部内容保存到一个变量中并从那里追加。我建议查看 Daniel's answer 以获得将 JSON 附加在一起的简单扩展。如果您需要更多帮助,请告诉我!
关于最后一行的错误 - 永远不要强制展开变量是一种很好的做法。鉴于我们看不到 JSON 树,这很难说;但请确保您访问的是正确的位置。 print(dictionary)
你的字典并尝试一些调试和/或为你的数组创建验证。
【讨论】:
以上是关于附加 JSON 数据 Swift的主要内容,如果未能解决你的问题,请参考以下文章