想象一下:
type Ninja struct {
name string
}
func (n *Ninja) Shurikens() int {
return 2
}
n := &Ninja{"Super Ninja"}
我想将其序列化为JSON,并获得以下内容:
{'Name': 'Super Ninja', 'Shurikens':2}
这只是我所需要的简化(在结构上调用方法,并在结果JSON中包含该输出)。
答案 0 :(得分:5)
简短的回答,你不能,你的Shurikens
必须是一个领域。
答案很长,好吧,您可以使用this之类的自定义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)
}
请注意,您的name
字段未导出,因为它不以大写字母开头,因此您将无法解组您的结构。