在golang中,JSON編碼和解碼是一個常見任務。當我們需要將一個結構體轉換成JSON格式的字符串時,可以使用json.Marshal()函數,如果我們需要將一個JSON字符串轉換成結構體,則可以使用json.Unmarshal()函數。但是在某些情況下,我們可能只需要將某些字段編碼為JSON字符串,而忽略掉其他字段。這時候,可以使用golang的json tag中的omitempty或-來達到這個目的。
type person struct { Name string `json:"name"` Age int `json:"-"` Country string `json:"country,omitempty"` }
上面的這個結構體中,我們將Age字段標記為了"-",這意味著Age字段將被忽略。而在Country字段中,我們將omitempty標記為了json tag,這意味著當Country字段為空時,將被忽略。
p := person{Name: "John Doe", Age: 30, Country: ""} jsonBytes, err := json.Marshal(p) if err != nil { log.Fatal(err) } fmt.Println(string(jsonBytes))
在上面的代碼中,我們創建了一個person結構體實例,Country字段為空字符串。當我們將這個實例轉換成JSON字符串時,Age字段被忽略,而Country字段也被忽略了,因為它是一個空字符串。
使用omitempty或-標記是非常方便的,但需要注意的是,它只在編碼JSON字符串時起作用,而在解碼時不起作用。因此,在解碼JSON字符串時,還是需要手動過濾掉那些不需要的字段。