2016-05-06 14 views
0

Haben Probleme, die wahrscheinlich so gering ist, aber meine Suchen ergeben nichts. Ich habe ein json Modell wie folgt:parse verschachtelte JSON-Attribute in swift

// schnelle Syntax, um Ihnen eine Vorstellung von dem Modell

{user: 
    {"name": "", 
    "password": "", 
    "medium" : { 
     {"title":"", 
     {"description":""}}} 

ich das obige Datenmodell aus einer GET-Anforderung an Benutzer immer und es gibt alle Info oben, aber wenn ich versuche, die "Medium" Informationen wie "Titel" zu analysieren & "Beschreibung" Ich habe kein Glück. Ich bekomme diese Antworten in Xcode, die sagen

"Wert des Objekts 'AnyObject' nicht ausgepackt, meinst du zu verwenden! Oder?"

und dann, wenn ich auf die runde rote Xcode-Nachricht klicke, um es zu beheben es setzt! S und? S überall, aber der Fehler bleibt. Hier ist meine Parse-Methode, die perfekt funktionierte, wenn ich nur vom "Medium" analysierte. Irgendeine Idee, was ich falsch mache?

ein Teil der Parse-Methode, wo ich den gleichen Fehler für jedes Attribut erhalten: alle Zeilen mit dem gleichen Fehler mit * gekennzeichneten mit etwas

// Parse JSON data 
      let jsonMedium = jsonResult?["user"] as! [AnyObject] //media where user is 
      for jsonMedia in jsonMedium { 
       let media = Media() 
       *media.title = jsonMedia["medium"]["title"] as! String 
       *media.description = jsonMedia["medium"]["description"] as! String 
       *media.category = jsonMedia["medium"]["category"] as! String 
       *media.image = jsonMedia["medium"]["image"] as! String 

       *if let IDer = jsonMedia["medium"]["id"] as? Int{ 
         var stringIder = String(IDer) 
         media.identifierString = stringIder 

       } 

noch kein Glück. Ich verstehe nicht, warum es mit regulärem JSON funktioniert, aber Xcode akzeptiert nichts, wenn ich versuche, verschachtelt zu werden. Ihre ganze Hilfe wurde geschätzt. In der Zwischenzeit ist hier die vollständige Methode, wenn es weiter

func parseJsonData(data: NSData) -> [Media] { 
     var medium = [Media]() 
     do { 
      let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, 
                     options: NSJSONReadingOptions.MutableContainers) as? NSDictionary 
      // Parse JSON data 
      let jsonMedium = jsonResult?["media"] as! [AnyObject] 
      for jsonMedia in jsonMedium { 
       let media = Media() 
       media.title = jsonMedia["medium"]["title"] as! String 
       media.description = jsonMedia["medium"]["description"] as! String 
       media.category = jsonMedia["medium"]["category"] as! String 
       media.image = jsonMedia["medium"]["image"] as! String 

       if let IDer = jsonMedia["medium"]["id"] as? Int{ 
         var stringIder = String(IDer) 
         media.identifierString = stringIder 

       } 


       medium.append(media) 
      } 
     } catch { 
      print(error) 
     } 
     return medium 
    } 
+0

Sie erhalten eine Syntaxfehler bei xcode ?? –

+0

Ja. Der Wert von Objekt eins, das ich für alle Zeilen beschrieben habe, die mit einem * –

+0

aufgelistet sind, können Sie auf Skype kommen? –

Antwort

0

Vielleicht hilft es

let request : ASIFormDataRequest = ...your request 

     if request.responseString() != nil { 
      var jsonResponse : Dictionary<String, AnyObject>? 
      do{ 
       jsonResponse = try NSJSONSerialization.JSONObjectWithData(request.responseData(), options: NSJSONReadingOptions.AllowFragments) as? Dictionary<String, AnyObject> 

      } catch _ { 
       //some error 
      } 
     } 
1
let json = [ 
    "user" : [ 
     "name" : "My Name", 
     "password" : "My Password", 
     "medium" : [ 
      "title" : "My Title", 
      "description" : "My Description" 
     ] 
    ] 
] 

if let userJson = json["user"] as? [String : AnyObject] { 
    if let name = userJson["name"] as? String { 
     print("name: \(name)") 
    } 
    if let password = userJson["password"] as? String { 
     print("password: \(password)") 
    } 
    if let mediumJson = userJson["medium"] as? [String : AnyObject] { 
     if let title = mediumJson["title"] as? String { 
      print("title: \(title)") 
     } 
     if let description = mediumJson["description"] as? String { 
      print("description: \(description)") 
     } 
    } 
} 
0

IT FIXED hilft! Nahm einen ganzen Tag von tiefen Gedanken und google/youtube/Stack/Brainstorming und Ihre Hilfe, aber es war eine veränderte Linie, die die ganze Sache bekam

// Parse JSON data 
      let jsonMedium = jsonResult?["user"]!["medium"] as? [AnyObject] 
      for jsonMedia in jsonMedium! { 
       let media = Media() 
       media.title = jsonMedia["title"] as! String 
       media.description = jsonMedia["description"] as! String 

statt gehen:

let jsonMedium = jsonResult?["user"] as! [AnyObject] //media where user is 
      for jsonMedia in jsonMedium { 
       let media = Media() 
       *media.title = jsonMedia["medium"]["title"] as! String 
       *media.description = jsonMedia["medium"]["description"] as! String