2016-07-15 2 views
0
{"title" : "saved users", "saved_users_list" : 

[ 
{"username" : "Danny7", "name" : "Danny", "email" : "[email protected]"}, 

{"username" : "Ike2016", "name" : "Ike", "email" : "[email protected]"}, 

{"username" : "john202", "name" : "John", "email" : "[email protected]"}, 

{"username" : "ray_mundo", "name" : "Raymundo", "email" : "[email protected]"} 

] 
} 

Я пытаюсь разобрать этот json с SwiftyJSON, и он не работает.Как разобрать этот пример json с SwiftyJSON?

json["saved_users_list"].count == 0 

json["saved_users_list"][0]["username"] does not equal "Danny7" 

json["title"] == null 

Вот как я получил данные:

Alamofire.request(.POST, url, parameters: parameters).validate().responseString { response in 
      switch response.result { 
      case .Success: 
       if let value = response.result.value { 
        value = JSON(value) 
        print(value) 
       } 
     } 

печати (значение) печатает JSON, перечисленных выше.

+0

Вы можете поделиться своим кодом? (Например, как вы разбираете JSON? И как вы знаете, что это похоже на то, что вы здесь поделили?) – smarx

+0

О, да, возможно, я не переводил строку в json правильно. Значение – walton

ответ

2

Вы можете попробовать поместить JSON(value) как этого

Alamofire.request(.POST, url, parameters: parameters).responseJSON { (response) in 
     switch response.result { 
     case .Success(let value) : 
      let swiftyJSON = JSON(value) 
      print(swiftyJSON) 
     } 
    } 

Надеется, что это помогает

+0

У вас все было в порядке. Я случайно делал .GET по какой-то причине, когда это должно было быть .POST. Я действительно получал пустой json-объект при выполнении .GET. Спасибо!!! – walton

0

Не пытается ли Alamofire разбирать JSON для вас? Посмотрите, работает ли ваш код лучше, если вы используете responseJSON и не вызываете JSON(...) самостоятельно. Т.е .:

Alamofire.request(.POST, url, parameters: parameters).validate().responseJSON { response in 
    switch response.result { 
    case .Success: 
     if let value = response.result.value { 
      print(value) 
     } 
    } 
} 
+0

было бы строкой, а i не может разобрать строки с SwfityJSON – walton

+0

@walton О, извините, вам нужно использовать 'responseJSON', если вы хотите, чтобы Alamofire разбирал JSON для вас. См. Мое редактирование, хотя ваш код должен делать почти то же самое. Это будет трудно отлаживать, не видя точной строки, которую вы разбираете или не можете воспроизвести, зная URL и параметры. – smarx

0

aHope этот класс решает проблему, он создан с использованием генератора модели SwiftyJSONAccelerator.

public class BaseClass: NSObject, NSCoding { 

// MARK: Declaration for string constants to be used to decode and also serialize. 
internal let kBaseClassTitleKey: String = "title" 
internal let kBaseClassSavedUsersListKey: String = "saved_users_list" 


// MARK: Properties 
public var title: String? 
public var savedUsersList: [SavedUsersList]? 


// MARK: SwiftyJSON Initalizers 
/** 
Initates the class based on the object 
- parameter object: The object of either Dictionary or Array kind that was passed. 
- returns: An initalized instance of the class. 
*/ 
convenience public init(object: AnyObject) { 
    self.init(json: JSON(object)) 
} 

/** 
Initates the class based on the JSON that was passed. 
- parameter json: JSON object from SwiftyJSON. 
- returns: An initalized instance of the class. 
*/ 
public init(json: JSON) { 
    title = json[kBaseClassTitleKey].string 
    savedUsersList = [] 
    if let items = json[kBaseClassSavedUsersListKey].array { 
     for item in items { 
      savedUsersList?.append(SavedUsersList(json: item)) 
     } 
    } else { 
     savedUsersList = nil 
    } 

} 


/** 
Generates description of the object in the form of a NSDictionary. 
- returns: A Key value pair containing all valid values in the object. 
*/ 
public func dictionaryRepresentation() -> [String : AnyObject ] { 

    var dictionary: [String : AnyObject ] = [ : ] 
    if title != nil { 
     dictionary.updateValue(title!, forKey: kBaseClassTitleKey) 
    } 
    if savedUsersList?.count > 0 { 
     var temp: [AnyObject] = [] 
     for item in savedUsersList! { 
      temp.append(item.dictionaryRepresentation()) 
     } 
     dictionary.updateValue(temp, forKey: kBaseClassSavedUsersListKey) 
    } 

    return dictionary 
} 

// MARK: NSCoding Protocol 
required public init(coder aDecoder: NSCoder) { 
    self.title = aDecoder.decodeObjectForKey(kBaseClassTitleKey) as? String 
    self.savedUsersList = aDecoder.decodeObjectForKey(kBaseClassSavedUsersListKey) as? [SavedUsersList] 

} 

public func encodeWithCoder(aCoder: NSCoder) { 
    aCoder.encodeObject(title, forKey: kBaseClassTitleKey) 
    aCoder.encodeObject(savedUsersList, forKey: kBaseClassSavedUsersListKey) 

} 

} 
Смежные вопросы