2015-06-04 8 views
1

Мне нужно получить местоположение из базы данных, это массив.JSON: читать массив из DB

Я уже пробовал много кода, но каждый код вызывает у меня ошибку типа «Не могу отличить значение типа NSArray от NSDictionary» или что-то в этом роде.

Это моя последняя попытка:

let jsonData:NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options:NSJSONReadingOptions.MutableContainers , error: &error) as! NSDictionary 
var location = ((jsonData as NSDictionary)["locations"] as! NSDictionary)["location_name"] as! String 
println(customernamedb) 

Это мой ответ:

{ "Статус": "1", "city_name": "Мумбаи", "CITY_ID":» 3 "," location ": [{" location_id ":" 1 "," location_name ":" Andheri "}, {" location_id ":" 2 "," location_name ":" Lower Parel "}, {" location_id ": «59», «location_name»: «Lower Parel»}, {«location_id»: «102», «location_name»: «Lower Parel»}, {"location_id": "144", "location_name": "Borivali"} , { "LOCATION_ID": "145", "LOCATION_NAME": "Borivali"}, { "LOCATION_ID": "146", "LOCATION_NAME": "Borivali"}, { "LOCATION_ID": "147", "LOCATION_NAME": «А ndheri "}]}

Мне нужно прочитать все location_name.

+0

'((jsonData, как NSDictionary) [ "места"]' является NSArray – Larme

+0

((jsonData, как. NSDictionary) ["location"] as! NSArray) ["location_name"] as! String говорит: AnyObject не конвертируется в String –

+0

При анализе JSON всегда помните, что все, что угодно nside [] - массив somethings и что-нибудь внутри {} - словарь. Массив может содержать как массивы, так и словари, а словарь может содержать как словари, так и массивы. –

ответ

2

Вы пытаетесь получить доступ к массиву, как это было словарь ...

Примечания: вместо укладки все на ту же линию, вы должны сломать заявления и использовать безопасные развёртки.

Пример:

if let jsonData = NSJSONSerialization.JSONObjectWithData(urlData!, options: nil, error: &error) as? [String:AnyObject] { // dictionary 
    if let locationsArray = jsonData["locations"] as? [[String:AnyObject]] { // array of dictionaries 
     for locationDictionary in locationsArray { // we loop in the array of dictionaries 
      if let location = locationDictionary["location_name"] as? String { // finally, access the dictionary like you were trying to do 
       println(location) 
      } 
     } 
    } 
} 

Обновление для Swift 2.0

do { 
    if let jsonData = try NSJSONSerialization.JSONObjectWithData(urlData!, options: []) as? [String:AnyObject] { 
     if let locationsArray = jsonData["locations"] as? [[String:AnyObject]] { 
      for locationDictionary in locationsArray { 
       if let location = locationDictionary["location_name"] as? String { 
        print(location) 
       } 
      } 
     } 
    } 
} catch { 
    print(error) 
} 
+1

большое спасибо! –

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