猿问

如何在Golang中访问struct中的嵌套字段

假设我有这个结构块:


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:-"但这不是我想要的。只是访问该领域的一种方式


潇潇雨雨
浏览 114回答 1
1回答

慕婉清6462132

t.Shipments是一个切片 - 因此要访问它的任何元素,您必须传递索引 - 然后您可以访问该元素的字段,例如if len(t.Shipments) > 0 {     fmt.Println(v.Shipments[0].ShipmentDate) }或在切片范围内:for i, v := range t.Shipments {     fmt.Println(i, v.ShipmentDate) }
随时随地看视频慕课网APP

相关分类

Go
我要回答