我的目标是从结构创建JSON编组但具有不同的字段。
例如,我的结构有UID, Name, and Type
个字段,但我想要仅仅有两个字段。
我有这样的事情:
package entity
type Farm struct {
UID string
Name string
Type string
}
-----------------------
package server
func(f entity.Farm) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
UID string `json:"uid"`
Name string `json:"name"`
}{
UID: f.UID,
Name: f.Name,
})
}
func main() {
farms := []entity.Farm{}
farms.append(farms, Farm{"123", "MyFarm1", "organic"})
farms.append(farms, Farm{"456", "MyFarm2", "organic"})
json, _ = json.Marshal(farms)
}
问题是我无法从MarshalJSON()
创建entity.Farm
的自定义方法,因为它位于另一个包中。谷歌说我应该做自定义类型并从中制作MarshalJSON()
的自定义方法。但我仍然不知道如何在[]entity.Farm
[]MyFarm
转换为func main()
所以在这里,如果我尝试使用自定义类型:
package server
type MyFarm entity.Farm
func(mf MyFarm) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
UID string `json:"uid"`
Name string `json:"name"`
}{
UID: mf.UID,
Name: mf.Name,
})
}
func main() {
farms := []entity.Farm{}
farms.append(farms, Farm{"123", "MyFarm1", "organic"})
farms.append(farms, Farm{"456", "MyFarm2", "organic"})
// Here I need to convert farms slice to []MyFarm slice
// so that I can use my custom MarshalJSON() from MyFarm
}
那么如何将farms
切片转换为MyFarm
切片,以便我可以使用MyFarm中的自定义MarshalJSON()?
我无法将Farm结构包更改为package server