JSON序列化错误“字符0

时间:2018-05-30 19:28:34

标签: ios json swift xcode

我正在使用.json文件从iOS应用程序读取和写入数据。目前我有一个应用程序,其中文本字段中的任何内容都将写入json文件,然后当按下按钮时,它会显示刚刚写入标签的内容。基本上只是测试阅读和写作。它从json文件中读取初始值,但是当我写入json文件然后尝试再次读取它时,它会给我错误:

  

“主题1:致命错误:'试试!'表达式意外地引发了错误:错误Domain = NSCocoaErrorDomain Code = 3840“字符0周围的值无效。”UserInfo = {NSDebugDescription =字符0周围的值无效。}“。

感谢任何帮助。

@IBAction func UpdateLabelTapped(_ sender: UIButton) {
    let path = Bundle.main.path(forResource: "SaveData", ofType: "json")
    let url = URL(fileURLWithPath: path!)

    let data = try! Data(contentsOf: url)
    let obj = try! JSONSerialization.jsonObject(with: data, options: .allowFragments)

    if let str = (obj as! NSDictionary).value(forKey: "message") {
        self.DataLabel.text = str as? String ?? ""
    }
}

@IBAction func WriteToJSONTapped(_ sender: UIButton) {
    let path = Bundle.main.path(forResource: "SaveData", ofType: "json")
    let url = URL(fileURLWithPath: path!)

    let dict = NSMutableDictionary()
    dict.setValue("Writing JSON!!", forKey: "message")
    dict.write(to: url, atomically: true)
}

它出现在let obj = try! JSONSerialization.jsonObject(with: data, options: .allowFragments)

的行上

1 个答案:

答案 0 :(得分:1)

这看起来很可疑:

dict.write(to: url, atomically: true)

write(to:atomically:) saves属性列表格式的字典,而不是JSON。要编写JSON,请尝试以下操作:

let jsonData = try! JSONSerialization.data(withJSONObject: dict)
try! jsonData.write(to: url, options: [])

注意:确保在生产代码中正确处理错误。 : - )