如何从 Child JSON 获取数据
how to get data from Child JSON
我正在制作一个天气应用程序,我正在尝试从我儿子的文件中获取日期和天气。我成功进入了 "daily",但我无法进入 "daily" 中的 "data"。这是代码:
func downloadForecastWeather(completed: @escaping DownloadComplete) {
Alamofire.request(FORECAST_API_URL).responseJSON { (response) in
let result = response.result
if let dictionary = result.value as? Dictionary<String, AnyObject> {
if let list = dictionary["list"] as? [Dictionary<String, AnyObject>] {
for item in list {
let forecast = ForecastWeather(weatherDict: item)
self.forecastArray.append(forecast)
}
self.forecastArray.remove(at: 0)
self.tableView.reloadData()
}
}
completed()
}
}
这是我的天气预报 class:
init(weatherDict: Dictionary<String, AnyObject>) {
if let temp = weatherDict["temperatureMin"] as? Double {
let rawValue = (temp - 273.15).rounded(toPlaces: 0)
self._temp = rawValue
}
if let date = weatherDict["time"] as? Double {
let rawDate = Date(timeIntervalSince1970: date)
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
self._date = "\(rawDate.dayOfTheWeek())"
}
}
这是 link 的 json:
https://api.darksky.net/forecast/132d3013b6e07bdf66159c1f5a90f76c/37.8267,-122.4233
所以基本上我的问题是如何从 "daily" 中的 "data" 获取数据并在我的 for in 方法中使用它。
如果您使用的是 Swift 4,您应该能够在您的 ForecastWeather 模型中采用 Codable 协议。
这将允许你做一些像这样的事情(不完全像这样):
let weather = try JSONDecoder().decode(Weather.self, from: jsonData!)
要获得相当深入的阅读,我建议从这里开始 Apple Docs
如果您想阅读更多内容,我发现这本书(付费)非常棒。
Swift Codable
飞行学校指南
尝试与 SwiftyJSON
一起使用,它很容易集成到您的代码中,您所要做的就是在 downloadForecastWeather
函数中添加以下代码。
func downloadForecastWeather(completed: @escaping DownloadComplete) {
Alamofire.request(FORECAST_API_URL).responseJSON { (response) in
let jsondata = JSON(response.result.value!)
if let myData = jsondata["list"]["daily"]["data"].arrayObject { // here you can access your data inside daily
for data in myData {
let forecast = ForecastWeather(weatherDict: data)
self.forecastArray.append(forecast)
}
self.forecastArray.remove(at: 0)
self.tableView.reloadData()
}
completed()
}
}
更多详情请参考此Documentation。
希望对你有用。
: D
我正在制作一个天气应用程序,我正在尝试从我儿子的文件中获取日期和天气。我成功进入了 "daily",但我无法进入 "daily" 中的 "data"。这是代码:
func downloadForecastWeather(completed: @escaping DownloadComplete) {
Alamofire.request(FORECAST_API_URL).responseJSON { (response) in
let result = response.result
if let dictionary = result.value as? Dictionary<String, AnyObject> {
if let list = dictionary["list"] as? [Dictionary<String, AnyObject>] {
for item in list {
let forecast = ForecastWeather(weatherDict: item)
self.forecastArray.append(forecast)
}
self.forecastArray.remove(at: 0)
self.tableView.reloadData()
}
}
completed()
}
}
这是我的天气预报 class:
init(weatherDict: Dictionary<String, AnyObject>) {
if let temp = weatherDict["temperatureMin"] as? Double {
let rawValue = (temp - 273.15).rounded(toPlaces: 0)
self._temp = rawValue
}
if let date = weatherDict["time"] as? Double {
let rawDate = Date(timeIntervalSince1970: date)
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
self._date = "\(rawDate.dayOfTheWeek())"
}
}
这是 link 的 json: https://api.darksky.net/forecast/132d3013b6e07bdf66159c1f5a90f76c/37.8267,-122.4233 所以基本上我的问题是如何从 "daily" 中的 "data" 获取数据并在我的 for in 方法中使用它。
如果您使用的是 Swift 4,您应该能够在您的 ForecastWeather 模型中采用 Codable 协议。
这将允许你做一些像这样的事情(不完全像这样):
let weather = try JSONDecoder().decode(Weather.self, from: jsonData!)
要获得相当深入的阅读,我建议从这里开始 Apple Docs
如果您想阅读更多内容,我发现这本书(付费)非常棒。 Swift Codable
飞行学校指南尝试与 SwiftyJSON
一起使用,它很容易集成到您的代码中,您所要做的就是在 downloadForecastWeather
函数中添加以下代码。
func downloadForecastWeather(completed: @escaping DownloadComplete) {
Alamofire.request(FORECAST_API_URL).responseJSON { (response) in
let jsondata = JSON(response.result.value!)
if let myData = jsondata["list"]["daily"]["data"].arrayObject { // here you can access your data inside daily
for data in myData {
let forecast = ForecastWeather(weatherDict: data)
self.forecastArray.append(forecast)
}
self.forecastArray.remove(at: 0)
self.tableView.reloadData()
}
completed()
}
}
更多详情请参考此Documentation。
希望对你有用。
: D