go json 字符串转struct时 如何判断 bool类型的字段是否存在?

go json 字符串转struct时 如何判断 bool类型的字段是否存在 omitempty貌似对bool类型是无效的?

阅读 13.2k
2 个回答

go 初始struct对象的时候是默认初始化里边的字段的。这意味着你不能根据json 中bool字段的存在来对应影响生成的struct对象。要不你把json的bool字段换成默认的go语义为空的数据类型,比如 string。或者你override go中转换struct对象的方法。

Go and JSON


type Month struct {
    MonthNumber int
    YearNumber int
}

func (m Month) MarshalJSON() ([]byte, error){
    return []byte(fmt.Sprintf("%d/%d", m.MonthNumber, m.YearNumber)), nil
}

func (m *Month) UnmarshalJSON(value []byte) error {
    parts := strings.Split(string(value), "/")
    m.MonthNumber = strconv.ParseInt(parts[0], 10, 32)
    m.YearNumber = strconv.ParseInt(parts[1], 10, 32)

    return nil
}

可以把struct中的bool类型改为指针类型 *bool,这样如果不存在这个字段,那么就是nil,否则就是存在,取出值即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题