来自 Python、Ruby 和 JS 等语言,我现在真的很难使用 Go。感觉过于复杂,但我希望我只是遗漏了一些东西。
现在我的代码可以成功调用波士顿的 MBTA API(使用他们的公共(public)开发者 key ) 并返回所有路线信息。
我把代码放在这里:http://pastebin.com/PkBaP714在这里:http://pastebin.com/7mRxgrpp
返回的示例数据:http://pastebin.com/M2hzMKYs
我想返回两件事 1) 仅返回每个 route_type 和 mode_name,以及 2) 当调用 route_type 时的每个 route_id 和 route_name。
无论出于何种原因,我都完全迷失了。我花了 16 个小时盯着文档,我觉得我在看一门外语:)。
寻求具体帮助可能太多了,但我很乐意。
最佳答案
只需将它们映射到一个新类型:
func main() {
flag.Parse()
c := gombta.Client{APIKey: apikey, URL: apiurl}
// get a list of routes by type
d, err := c.GetRoutes(format)
check(err)
var toPrint interface{}
if typeid == 9999 {
type Result struct {
RouteType string `json:"route_type"`
ModeName string `json:"mode_name"`
}
rs := []Result{}
for _, m := range d.Mode {
rs = append(rs, Result{
RouteType: m.RouteType,
ModeName: m.ModeName,
})
}
toPrint = rs
} else {
type Result struct {
RouteID string `json:"route_id"`
RouteName string `json:"route_name"`
}
rs := []Result{}
for _, m := range d.Mode {
if fmt.Sprint(typeid) == m.RouteType {
for _, r := range m.Route {
rs = append(rs, Result{
RouteID: r.RouteID,
RouteName: r.RouteName,
})
}
}
}
toPrint = rs
}
j, err := json.MarshalIndent(toPrint, "", " ")
fmt.Printf("RouteTypes: ")
os.Stdout.Write(j)
}
关于json - 新手Go,试图梳理如何处理JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554642/