【问题标题】:Appending JSON data Swift附加 JSON 数据 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 数据的方法,但也许我已经盯着代码太久了,以至于我错过了一个简单的修复方法。

【问题讨论】:

    标签: swift


    【解决方案1】:

    swift 中没有原生方式,也没有第三方库将 json 对象附加到文件。

    您需要做的是,当您调用 getJsonData 时,您将 JSON 的全部内容保存到一个变量中并从那里追加。我建议查看 Daniel's answer 以获得将 JSON 附加在一起的简单扩展。如果您需要更多帮助,请告诉我!

    关于最后一行的错误 - 永远不要强制展开变量是一种很好的做法。鉴于我们看不到 JSON 树,这很难说;但请确保您访问的是正确的位置。 print(dictionary) 你的字典并尝试一些调试和/或为你的数组创建验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 2017-09-22
      • 2019-04-05
      • 1970-01-01
      • 2016-06-11
      • 1970-01-01
      • 2013-03-31
      • 2019-07-07
      相关资源
      最近更新 更多