JSON 序列化错误“字符 0 处的值无效
Posted
技术标签:
【中文标题】JSON 序列化错误“字符 0 处的值无效【英文标题】:JSON Serialization Error "Invalid value at character 0 【发布时间】:2018-05-30 19:28:33 【问题描述】:我只是了解如何使用 .json 文件从 ios 应用程序读取和写入数据。目前我有一个应用程序,其中文本字段中的任何内容都将写入 json 文件,然后当按下按钮时,它会显示刚刚写入标签的内容。基本上只是测试阅读和写作。它从 json 文件中读取初始值很好,但是当我写入 json 文件然后尝试再次读取它时,它给了我错误:
“线程 1:致命错误:'try!'表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 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)
的那一行
【问题讨论】:
你到底想做什么?在点击一个按钮时写入 json 并在点击另一个按钮时读取它? 没错。当一个按钮被按下时,它将一个值写入一个 JSON 文件,当另一个按钮被按下时,它读取并显示它 错误表示第一个字符不是有效的 JSON。除了问题之外,您无法写入应用程序包。该捆绑包是只读的。并且不要在 Swift 中使用NS(Mutable)Dictionary
,使用本机类型。顺便说一句,NSDictionary
的 write
API 写入属性列表,而不是 JSON。 value(forKey
不好,大写的变量和函数名也不好。
读取和写入文件见:***.com/questions/24097826/…
【参考方案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: [])
注意:确保在生产代码中正确处理错误。 :-)
【讨论】:
以上是关于JSON 序列化错误“字符 0 处的值无效的主要内容,如果未能解决你的问题,请参考以下文章