Как проанализировать данные JSON с swift4, который находится внутри другого словаря отформатированных данных? - PullRequest
0 голосов
/ 31 мая 2018

Я создавал приложение для прогнозирования погоды в учебных целях с помощью API.API имеет данные в формате Jason, приведенные ниже:

{
"coord": {
"lon": 139,
"lat": 35
},
"weather": [
 {
  "id": 520,
  "main": "Rain",
  "description": "light intensity shower rain",
  "icon": "09d"
}
],
"base": "stations",
"main": {
"temp": 293.15,
"pressure": 1005,
"humidity": 94,
"temp_min": 293.15,
"temp_max": 293.15
},
"visibility": 10000,
"wind": {
"speed": 7.2,
"deg": 210
},
"clouds": {
"all": 75
},
"dt": 1527753600,
"sys": {
"type": 1,
"id": 7616,
"message": 0.0068,
"country": "JP",
"sunrise": 1527708700,
"sunset": 1527760320
},
"id": 1851632,
"name": "Shuzenji",
"cod": 200
}

enter image description here

Я хотел получить доступ к словарю погоды и попытался получить доступ к значению основного ключа с помощьюэта строка кодов в последней версии swift.

Я могу получить название города и температуру. Но когда я применяю эти коды, у меня всегда появляются предупреждения об ошибках и я не могу получить доступ к главной в погоде.

Может кто-нибудь есть идеи, как решить эту проблему?

enter image description here

  if let dict = result.value as? Dictionary< String, AnyObject>{
            if let name = dict["name"] as? String {
                self._cityName = name


            }
            if let weather = dict["weather"] as? Dictionary<String,AnyObject >{
                if let main = weather[0]["main"] as? String {
                    self._weatherType = main
                }
            }

            if let main = dict["main"] as? Dictionary<String, AnyObject>{
                if let currentTemp = main["temp"] as? Double {
                    let kelvinToFarenheitPre = (currentTemp * (9/5) - 459.67)
                    let kelvinToFarenheit = Double( round(10 * kelvinToFarenheitPre/10 ))

                    self._currentTemp = kelvinToFarenheit
                }
            }
            //print(self.cityName)

        }
        //print("\(dict)")
        print(self.weatherType)
       print(self.cityName)

    }

1 Ответ

0 голосов
/ 01 июня 2018

В этом случае проблема с кодом.Для этого конкретного случая нет изменений в swift 3 и swift 4.1

Я ссылался на него только как на словарь, но в json это массив словаря, поэтому мне нужно привести это как массив словаря.

Итак, для этого правильный код будет:

   if let weather = dict["weather"] as? [Dictionary<String,AnyObject >]{
              if let main = weather[0]["main"] as? String {
                self._weatherType = main
                }
         }
...