json - 去 openweathermap 预测返回类型
问题描述
我是新手,我正在尝试使用 OpenWeatherMap 和 briandowns 的 go-package 构建一个小天气应用程序。
我阅读当前天气没有问题,但我无法处理预测方法的结果。
func main() {
apiKey := "XXXX"
w, err := owm.NewForecast("5", "C", "en", apiKey)
if err != nil {
log.Fatal(err)
}
w.DailyByName("London", 1)
data := w.ForecastWeatherJson
fmt.Println(data)
}
其中 apiKey 需要替换为有效的(注册时可以免费获得)。
我的问题是从 ForecastWeatherJson 中提取信息。它被定义为:
type ForecastWeatherJson interface {
Decode(r io.Reader) error
}
在 forecast.go 文件中。
解码定义为:
func (f *Forecast5WeatherData) Decode(r io.Reader) error {
if err := json.NewDecoder(r).Decode(&f); err != nil {
return err
}
return nil
}
在 forecast5.go 中。
我真的不知道从哪里开始,因为我没有找到显示处理数据的文档示例,除了其他语言(所以我猜这是一个特定的问题)。我看到了它是如何在例如 python 中完成的,但是在 go 的情况下,返回类型对我来说并不清楚。
任何提示或示例链接表示赞赏。
解决方案
您需要的数据已经在您的w
参数中解码,但您需要键入 assert 以更正 Weather 类型。在你的情况下,因为你正在使用type=5
你应该使用owm.Forecast5WeatherData
. 然后你的主要看起来像这样。
func main() {
apiKey := "XXXX"
w, err := owm.NewForecast("5", "C", "en", apiKey)
if err != nil {
log.Fatal(err)
}
w.DailyByName("London", 3)
if val, ok := w.ForecastWeatherJson.(*owm.Forecast5WeatherData); ok {
fmt.Println(val)
fmt.Println(val.City)
fmt.Println(val.Cnt)
}
}
推荐阅读
- java - 调用方法时的异常处理
- swift - Swift - 使用枚举映射 UISegmentedControl
- c# - 为 Kentico 对象生成类
- javascript - .eslintrc.js 键带有“-”(破折号)
- amazon-ec2 - GPU 利用率如何在神经网络训练的背景下发挥作用?
- android - 带有 createChooser 的 startActivity 不显示选择器但立即启动
- sql - Rails has_many through - 如何为连接表指定键列?
- sql-order-by - Drupal 8 SQL语句,避免addOrder通过在SELECT中添加一些字段
- fancytree - 如何允许用户选择花式树节点中的文本
- sql - 如何在 SQL/Impala 的列中显示唯一值