2014-12-17 8 views
1

У меня есть проблема в использовании valueForKeyPath, вот так, как я получаю значение dataVersion, и это работает прекрасно:valueForKeyPath с вложенной JSON

Alamofire.request(.GET, "https://www.amazon.fr/s", parameters:parameters) 
    .responseJSON { (_, _, JSON, _) -> Void in 

     let priceResult: String? = JSON?.valueForKeyPath("reponseMetadata.dataVersion") as String? 
     println(priceResult) 

} 

Но когда я пытаюсь получить доступ к значению URL-адрес, как это, это не в состоянии

Alamofire.request(.GET, "https://www.amazon.fr/s", parameters:parameters) 
    .responseJSON { (_, _, JSON, _) -> Void in 

     let priceResult: String? = JSON?.valueForKeyPath("preloadImages.images.url") as String? 
     println(priceResult) 

} 

Вот мой Json:

{ 
    responseMetadata: { 
     dataVersion: "v0.1" 
    }, 
    preloadImages: { 
     images: [ 
      { 
       url: "http://ecx.images-amazon.com/images/I/51K4P7REBKL._SL500_AC_.jpg" 
      } 
     ] 
    } 
} 

я новый в ИО, так что любая помощь будет приветствовать!

ответ

1

preloadImages.images - массив объектов (массив словаря в быстром разговоре), поэтому ваш valueForKeyPath не будет работать. К сожалению, не существует какой-либо способ индексировать массив через valueForKeyPath, так что вы должны будете получить его менее непосредственно:

let string = "{ \"responseMetadata\": { \"dataVersion\": \"v0.1\" }, \"preloadImages\": { \"images\": [ { \"url\": \"http://ecx.images-amazon.com/images/I/51K4P7REBKL._SL500_AC_.jpg\" } ] } }" 
var error : NSError? 
let data = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) 
if let json: AnyObject = NSJSONSerialization.JSONObjectWithData(data!, options: .allZeros, error: &error) { 
    if let images = json.valueForKeyPath("preloadImages.images") as? Array<Dictionary<String,String>> { 
     let url = images[0]["url"] 

     println("url = \(url)") 
    } 
} else { 
    println("json failed: \(error)") 
} 

Обратите внимание, что ваш JSON также не является допустимым, как показано, так как ключи объекта Арен» t, я предполагаю, что вы сбрасываете переменную JSON с помощью println вместо отображения фактических данных JSON.

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