使用Go导出到JSON时,如何包含方法调用的结果?

Geo*_*Geo 1 json go

想象一下:

type Ninja struct {
  name string
}

func (n *Ninja) Shurikens() int {
  return 2
}

n := &Ninja{"Super Ninja"}
Run Code Online (Sandbox Code Playgroud)

我想将其序列化为JSON,并获得以下内容:

{'Name': 'Super Ninja', 'Shurikens':2}
Run Code Online (Sandbox Code Playgroud)

它只是我需要的简化(在结构上调用方法,并在结果JSON中包含该输出).

One*_*One 5

简短的回答,你不能,你Shurikens必须是一个领域.

长的答案,那么,你可以使用自定义MarshalJSON这样:

func (n *Ninja) MarshalJSON() ([]byte, error) {

    return []byte(fmt.Sprintf(`{"Name":"%s", "Shurikens":%d}`, n.name, n.Shurikens())), nil
}

func main() {
    n := []*Ninja{{"X"}, {"Y"}}
    b, err := json.Marshal(n)
    fmt.Println(string(b), err)
}
Run Code Online (Sandbox Code Playgroud)

请记住,您的name字段未导出,因为它不以大写字母开头,因此您将无法解组您的结构.