2016-05-21 2 views
0

я получил NSData от онлайн API следующим кодом:Синтаксический NSData в Json неудачу в моем быстром приложении

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 
     if error != nil { 
      print("\(error)") 
      return 
     } 
     let res = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("\(res)") 
     }; 
task.resume() 

Данные выглядит следующим образом (NSString нормально):

{ 
"word": "detrimental", 
"results": [ 
    { 
     "definition": "(sometimes followed by `to') causing harm or injury", 
     "partOfSpeech": "adjective", 
     "synonyms": [ 
      "damaging", 
      "prejudicial", 
      "prejudicious" 
     ], 
     "similarTo": [ 
      "harmful" 
     ], 
     "derivation": [ 
      "detriment" 
     ] 
    } 
], 
"syllables": { 
    "count": 4, 
    "list": [ 
     "det", 
     "ri", 
     "men", 
     "tal" 
    ] 
}, 
"pronunciation": { 
    "all": ",dɛtrə'mɛntəl" 
}, 
"frequency": 2.77 
} 

Теперь я пытаюсь разобрать данные в json. Я пробовал несколько способов, но все провалилось. Как это:

func getJSON(data:NSData) -> [[String:AnyObject]]{ 
    var json = [[String:AnyObject]]() 
    do { 
     json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [[String:AnyObject]] 
    } catch {} 
    return json; 
} 

и это один также не удалось: (Причина: Не удалось бросить значение типа '__NSCFDictionary' (0xd755c0) к 'NSArray' (0xd752f0).)

func hiJson(data:NSData) -> NSArray { 
    var json: NSArray! 
    do { 
     json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as! NSArray 
    } catch { 
     print(error) 
    } 
    return json 
} 

Может ли кто-нибудь помочь?

+5

Ваши данные словаря, а не массив. – Moritz

+0

Вы правы, спасибо за помощь. Кстати, знаете ли вы, как получить ключ определения в результатах? Я попытался res ["results"] ["definition"], но это не сработало –

ответ

1

Я уверен, что это не массив, его словарь. Разбираем в Json так:

let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as! NSDictionary 

И получить ключ определения, сделать это

res.valueForKeyPath("results.definition") 
+0

Спасибо очень. Ваш ответ спас мою жизнь –

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