golang json化时允许赋予默认值

演示omitempty 代码:

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   type Hobby struct {
      Movie string `json:"movie,omitempty" bson:"movie"`
      BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
   }

   type Person struct {
      Name  string `json:"name,omitempty" bson:"name"`
      Level int   `json:"level,omitempty" bson:"level"`
      Hobby Hobby `json:"hobby,omitempty" bson:"hobby"`
   }

   var coder Person
   var level int = 0   
   coder.Level = level
   coder.Name = "mike"
   bytes, _ := json.Marshal(coder)
   fmt.Printf("%s\n", string(bytes))
   // 打印为:{"name":"mike","hobby":{}}
   return

}

我们发现给Level 字段赋值了0,但是json字符串化后打印, level字段没有了。反而是没有赋值的Hobby字段出现了。当实际应用时level可以为0,而Hobby 如果没有赋值时字符串中不需要出现。 如何解决情况?

示例代码:

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	type Hobby struct {
		Movie string `json:"movie,omitempty" bson:"movie"`
		BasketballTeam string `json:"basketball_team,omitempty" bson:"basketball_team"`
	}

	type Person struct {
		Name  string `json:"name,omitempty" bson:"name"`
		Level *int   `json:"level,omitempty" bson:"level"`
		Hobby *Hobby `json:"hobby,omitempty" bson:"hobby"`
	}

	var coder Person
	var level int = 0
	coder.Level = &level
	coder.Name = "mike"
	bytes, _ := json.Marshal(coder)
	fmt.Printf("%s\n", string(bytes))
	// 打印 {"name":"mike","level":0}
	return

}

指定 Level 、Hobby 引用类型后问题就可以了。

posted @   熊先生不开玩笑  阅读(1877)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示