2015-08-13 1 views
0

У меня есть группа функций, созданных для извлечения данных из API Wunderground. Однако из-за того, что раздел «dailysummary» как-то заключен в массив, я не могу понять, как его получить. Это та часть, которая не может получить доступ к:Проблемы Доступ к разделу «dailysummary» Wunderground API

"history": { 
    "dailysummary": [ 
    { "date": { 
    "pretty": "12:00 PM PDT on August 12, 2015", 
    "year": "2015", 
    "mon": "08", 
    "mday": "12", 
    "hour": "12", 
    "min": "00", 
    "tzname": "America/Los_Angeles" 
    }, 
    "fog":"0","rain":"0","snow":"0","snowfallm":"0.00","snowfalli":"0.00","monthtodatesnowfallm":"", "monthtodatesnowfalli":"","since1julsnowfallm":"", "since1julsnowfalli":"","snowdepthm":"", "snowdepthi":"","hail":"0","thunder":"0","tornado":"0","meantempm":"26", "meantempi":"79","meandewptm":"16", "meandewpti":"60","meanpressurem":"1014", "meanpressurei":"29.94","meanwindspdm":"9", "meanwindspdi":"5","meanwdire":"","meanwdird":"331","meanvism":"16", "meanvisi":"10","humidity":"","maxtempm":"33", "maxtempi":"91","mintempm":"19", "mintempi":"66","maxhumidity":"78","minhumidity":"34","maxdewptm":"17", "maxdewpti":"62","mindewptm":"15", "mindewpti":"59","maxpressurem":"1016", "maxpressurei":"30.01","minpressurem":"1012", "minpressurei":"29.88","maxwspdm":"24", "maxwspdi":"15","minwspdm":"0", "minwspdi":"0","maxvism":"16", "maxvisi":"10","minvism":"16", "minvisi":"10","gdegreedays":"28","heatingdegreedays":"0","coolingdegreedays":"14","precipm":"0.00", "precipi":"0.00","precipsource":"","heatingdegreedaysnormal":"0","monthtodateheatingdegreedays":"0","monthtodateheatingdegreedaysnormal":"0","since1sepheatingdegreedays":"","since1sepheatingdegreedaysnormal":"","since1julheatingdegreedays":"0","since1julheatingdegreedaysnormal":"17","coolingdegreedaysnormal":"5","monthtodatecoolingdegreedays":"106","monthtodatecoolingdegreedaysnormal":"69","since1sepcoolingdegreedays":"","since1sepcoolingdegreedaysnormal":"","since1jancoolingdegreedays":"600","since1jancoolingdegreedaysnormal":"280" } 
    ] 
} 

Смотрите этот сайт для справки о том, как я называю API: http://devdactic.com/rest-api-parse-json-swift/

ответ

1

Вы можете использовать SwiftyJSON или другую библиотеку, но для моего примера я делаю это просто с NSJSONSerialization.

Здесь я получаю в «истории» словарь затем в «dailysummary» словарь и я бросил результат как массив словарей (скажем, ваш словарь JSON называется «JSON» тоже):

if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &err) as? [String:AnyObject] { 
    if let history = json["history"] as? [String:AnyObject], 
     let daily = history["dailysummary"] as? [[NSObject:AnyObject]] { 
     // "daily" is our array 
    } 
} 

Затем я зацикливаюсь внутри массива (в вашем примере есть только один объект внутри, но их может быть много): некоторые значения - это строки, другие - словари, такие как «дата».

Я использую «если позволить» безопасно разворачивать и отбрасывать содержимое:

if let json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &err) as? [String:AnyObject] { 
    if let history = json["history"] as? [String:AnyObject], 
     let daily = history["dailysummary"] as? [[NSObject:AnyObject]] { 
     for item in daily { 
      for (key, _) in item { 
       println(key) // "mintempm", "mindewpti", "since1sepheatingdegreedaysnormal", "meantempm", etc 
      } 
      if let coolingdegreedaysnormal = item["coolingdegreedaysnormal"] as? String { 
       println(coolingdegreedaysnormal) // "5" 
      } 
      if let date = item["date"] as? [String:AnyObject], let pretty = date["pretty"] as? String { 
       println(pretty) // "12:00 PM PDT on August 12, 2015" 
      } 
     } 
    } 
} 

Если вы используете SwiftyJSON или эквивалент, вам не придется делать слепки вручную, но вы» я должен использовать специальный синтаксис библиотеки, возможно, что-то в этом стиле:

for item in json["history"]["dailysummary"].array { 
    // ... 
}