嵌入结构但只有json

时间:2017-07-23 16:32:22

标签: go

我有一个我想要嵌入的结构但想要json只编码该结构的某些字段(并将它们小写)。这可能吗?

https://play.golang.org/p/bEC4zlx2oC

package main

import (
    "encoding/json"
    "fmt"
    "net/url"
)

type MyStruct struct {
    Name string `json:"name"`
    *url.URL
}

func main() {
    m := &MyStruct{
        "Bob",
        &url.URL{
            Scheme: "http", 
        },
    }

    j, err := json.Marshal(m)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(j))  // want {"name":"Bob","scheme":"http"}
}

1 个答案:

答案 0 :(得分:3)

以示例扩展我的评论。

这是可行的,你必须实现Marshal接口。

例如:

func (u *MyStruct) MarshalJSON() ([]byte, error) {
    return json.Marshal(&struct {
        Name   string `json:"name"`
        Scheme string `json:"scheme"`
    }{
        Name:   u.Name,
        Scheme: u.Scheme,
    })
}

播放链接:https://play.golang.org/p/LLchuOdYvf

输出:

{"name":"Bob","scheme":"http"}