为了账号安全,请及时绑定邮箱和手机立即绑定

Go 新手,正在尝试理清如何处理 JSON

Go 新手,正在尝试理清如何处理 JSON

Go
慕田峪9158850 2021-11-08 15:34:01
来自 Python、Ruby 和 JS 等语言,我现在真的在为 Go 苦苦挣扎。感觉过于复杂,但我希望我只是遗漏了一些东西。现在我有代码可以成功调用波士顿的 MBTA API(使用他们的公共开发人员密钥)并返回所有路线信息。我已经把代码放在这里: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 个小时盯着文档,感觉就像在看一门外语:)。寻求具体帮助可能太多了,但我会喜欢的。
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

只需将它们映射到新类型:


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)

}



查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信