Использование omitempty в теге. Не нужно указывать элементы для включения при создании экземпляра структуры.
type Paper struct {
PID int `json:"pID,omitempty"`
PTitle string `json:"pTitle"`
PDesc string `json:"pDesc"`
PPwd string `json:"pPwd,omitempty"`
}
func main() {
u := Paper{PTitle: "Title 1", PDesc: "Desc 1"}
b, _ := json.Marshal(u)
fmt.Println(string(b))
}
Печать: {"pTitle": "Заголовок 1", "pDesc": "Desc 1"}
Единственная проблема в том, что если PID явно равен 0, он все равно будет его опускать.
Как:
Paper {PTitle: "Заголовок 1", PDesc: "Desc 1", PID: 0}
Тогда он все равно будет печатать {"pTitle": "Заголовок 1", "pDesc": "Desc 1"}
Другой способ сделать это, используя встроенный тип:
Обратите внимание, что встроенный тип должен быть указателем, чтобы он мог быть равен нулю, а omitempty может исключить его.
type Paper struct {
PID int `json:"pID"`
PPwd string `json:"pPwd"`
}
type BriefPaper struct {
PTitle string `json:"pTitle"`
PDesc string `json:"pDesc"`
*Paper `json:",omitempty"`
}
func main() {
u := BriefPaper{PTitle: "Title 1", PDesc: "Desc 1"}
b, _ := json.Marshal(u)
fmt.Println(string(b))
}
Печать: {"pTitle": "Заголовок 1", "pDesc": "Desc 1"}
Если требуется вложенная внутренняя структура для бумаги, пометьте ее как * Paper json:"paper,omitempty"