繁体   English   中英

如何在 Golang 中访问结构体中的嵌套字段

[英]How to access a nested field in struct in Golang

假设我有这个结构块:

type AllShipments struct {
    Shipments []struct {
        ShipmentID    int       `json:"shipmentId"`
        ShipmentDate  time.Time `json:"shipmentDate"`
        ShipmentItems []struct {
            OrderItemID string `json:"orderItemId"`
            OrderID     string `json:"orderId"`
        } `json:"shipmentItems"`
        Transport struct {
            TransportID int `json:"transportId"`
        } `json:"transport"`
    } `json:"shipments"`
}

我用:

func main() {
    var t AllShipments
    .....
    .....
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    err = json.Unmarshal(body, &t)
    if err != nil {
        fmt.Println(string(body))
    }

    prettyJSON, err := json.MarshalIndent(t, "", "    ")
    if err != nil {
        log.Fatal("Failed to generate json", err)
    }
    fmt.Printf("%s\n", string(prettyJSON))

例如,如何仅获取 json 字段“shipmentDate”,我尝试了t.Shipments.ShipmentDate但这没有用。 t.Shipments确实过滤掉了第一个数组。 那么最好的方法是什么? 我知道我可以使用"json:-"禁用其他 json 字段,但这不是我想要的。 只是一种访问该字段的方法

t.Shipments是一个切片 - 所以要访问它的任何元素,你必须传递一个索引 - 然后你可以访问该元素的字段,例如

if len(t.Shipments) > 0 {
    fmt.Println(v.Shipments[0].ShipmentDate)
}

或覆盖切片:

for i, v := range t.Shipments {
    fmt.Println(i, v.ShipmentDate)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM