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