我尝试序列化 NSDictionary 并收到以下错误:无法读取数据,因为格式不正确。
这是我尝试序列化的一小部分对象。其格式始终相同,我刚刚删除了大部分项目。
{
action = Websites;
method = "school_webpage";
result = {
CurrentStatus = 1;
Description = OK;
ReturnValue = {
bgcolor = "#FFFFFF";
splash = "";
tree = (
{
children = (
{
iconCls = "icn-add";
id = 462793;
leaf = 1;
showAdd = 0;
text = "Ahrens, Linda";
type = website;
},
{
iconCls = "icn-add";
id = 498858;
leaf = 1;
showAdd = 0;
text = "Altemose, David";
type = website;
},
{
iconCls = "icn-add";
id = 11159347;
leaf = 1;
showAdd = 0;
text = "Alvin, Patrick";
type = website;
}
}
我的代码如下。此 NSDictionary 作为 AnyObject 传递
func parseJson(_ JsonDict: AnyObject)
{
print(JsonDict)
var data = [newsarticle]()
do{
let jsonData = NSKeyedArchiver.archivedData(withRootObject: JsonDict)
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers )
if let dict = jsonObject as? [String: AnyObject]
{
if let dict2 = (dict as? [String : AnyObject])?["result"]?["ReturnValue"]{
if let dict3 = (dict2 as! [String: AnyObject])["tree"] as? [AnyObject] {
for dict4 in dict3 {
if let dict5 = dict4["children"] as? [AnyObject]{
for dict6 in dict5{
data.append(newsarticle(name: ((dict6 as? [String : AnyObject])?["text"])! as! String,desc: "https://www.oncoursesystems.com/school/webpage/\((dict6 as? [String : AnyObject])?["id"])/689493"))
}
}
}
addData(data)
}
}
}
}
catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
}
最佳答案
这很难读。我建议您花一些时间清理代码,例如:
if let dict = jsonObject as? [String: AnyObject] {
if let dict2 = (dict as? [String : AnyObject])?["result"]?["ReturnValue"] {
}
}
可以重写为:
if let dict = jsonObject as? [String: AnyObject] {
if let returnValue = dict["result"]?["ReturnValue"] {
}
}
因为您已经在第一行中将 dict
解包为 [String: AnyObject]
。并使用更具描述性的变量名称,因为 dict5
不会帮助您了解尝试解析事物的位置。
所以看看这一行,try
语句是导致错误的原因。
let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers )
本质上是说,无论您作为 jsonData
传入的内容都不是真正的 json。我建议您通过像 jsonlint.com 这样的网站运行任何 jsonData
。并修复格式直至其有效。
关于ios - 序列化 NSDictionary 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40579042/