Erreur lors de la serialization de NSDictionary

Je tente de sérialiser un NSDictionary et d'get l'erreur suivante: Les données n'ont pas pu être lues car elles ne sont pas au format correct.

Ceci est une petite partie de l'object que je tente de sérialiser. C'est le même format tout au long, je viens d'enlever la plupart des articles.

{ 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, Pasortingck"; type = website; } } 

Mon code ci-dessous. Ce NSDictionary est transmis en tant que 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? [Ssortingng: AnyObject] { if let dict2 = (dict as? [Ssortingng : AnyObject])?["result"]?["ReturnValue"]{ if let dict3 = (dict2 as! [Ssortingng: 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? [Ssortingng : AnyObject])?["text"])! as! Ssortingng,desc: "https://www.oncoursesystems.com/school/webpage/\((dict6 as? [Ssortingng : AnyObject])?["id"])/689493")) } } } addData(data) } } } } catch let error as NSError { print("Failed to load: \(error.localizedDescription)") } } 

C'est assez difficile à lire. Je vous recommand de passer du time à nettoyer votre code, par exemple:

 if let dict = jsonObject as? [Ssortingng: AnyObject] { if let dict2 = (dict as? [Ssortingng : AnyObject])?["result"]?["ReturnValue"] { } } 

Peut être réécrit comme:

 if let dict = jsonObject as? [Ssortingng: AnyObject] { if let returnValue = dict["result"]?["ReturnValue"] { } } 

Parce que vous avez déjà déballé dict tant que [Ssortingng: AnyObject] dans la première ligne. Et utilisez des noms de variables plus descriptifs car dict5 ne vous aidera pas à savoir où vous en êtes pour essayer d'parsingr les choses.

Alors jetez un oeil à cette ligne, l'instruction try est ce qui cause votre erreur.

 let jsonObject = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.mutableContainers ) 

C'est essentiellement dire, quoi que vous jsonData comme jsonData n'est pas vrai json. Je vous recommand d'exécuter jsonData via un site tel que jsonlint.com et de corriger le format jusqu'à ce qu'il soit valide.