2016-11-13 1 views
0

NSDictionary를 직렬화하려고 시도하고 다음 오류가 발생합니다. 올바른 형식이 아니기 때문에 데이터를 읽을 수 없습니다.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)") 

    } 
} 

답변

0

이 읽기가 매우 어렵 기 때문에 통과됩니다. 이미 첫 번째 줄에 [String: AnyObject]dict을 풀어했기 때문에

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

    } 
} 

:

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

    } 
} 

은 다음과 같이 다시 쓸 수 있습니다 : 나는 당신과 같은 코드를 위로 청소 시간을 보내고 좋습니다. dict5은 구문 분석을 시도하는 위치를 파악하는 데 도움이되지 않으므로 더 자세한 변수 이름을 사용하십시오.

그래서이 줄을보고이의 try 문은 오류를 일으키는 것입니다. 당신이 jsonData로 전달하는 어떤

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

그것은 본질적으로 말하는는 실제 JSON 없습니다. 난 당신이 jsonlint.com 같은 사이트를 통해 무엇이든 jsonData 실행하고 유효한 때까지 형식을 수정하는 것이 좋습니다.

관련 문제