新手,尝试整理如何处理JSON

新手,尝试整理如何处理JSON,json,go,Json,Go,来自Python、Ruby和JS等语言的我现在真的很难适应Go。这感觉太复杂了,但我希望我只是错过了一些东西 现在,我有一些代码可以成功地调用Boston的MBTA API(使用其公共开发人员密钥)并返回所有路由信息 我在这里删除了代码:在这里: 返回的示例数据: 我想返回两件事1)只返回每个路由类型和模式名称,2)当调用路由类型时,返回每个路由id和路由名称 不管什么原因,我完全迷路了。我花了16个小时盯着文档,我觉得我在看一门外语:) 请求特定的帮助可能太多了,但我会喜欢的。只需将它们映射到

来自Python、Ruby和JS等语言的我现在真的很难适应Go。这感觉太复杂了,但我希望我只是错过了一些东西

现在,我有一些代码可以成功地调用Boston的MBTA API(使用其公共开发人员密钥)并返回所有路由信息

我在这里删除了代码:在这里:

返回的示例数据:

我想返回两件事1)只返回每个路由类型和模式名称,2)当调用路由类型时,返回每个路由id和路由名称

不管什么原因,我完全迷路了。我花了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)
}

需要注意的是,代码中的API密钥是公开的。go json包有很好的文档记录,并且在许多博客(包括官方的golang.org)上都有详细的描述。你能告诉我们你尝试了什么但没有成功吗?老兄,谢谢你--我知道这很讨厌,但你不明白你帮了我多少忙对我来说是有意义的。