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 引用类型后问题就可以了。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM