前提
不勉強ですみませんGo勉強中で、現在Goで渡された値をjsonに入れ替えて、そのjsonで他の外部APIにリクエストする処理を実装しています。
対象のjsonに入れ替える際に、omitemptyタグの機能を利用して構造体に値が入っていない場合はそのフィールドを除外したいのですが、上手くいきません。
実現したいこと
構造体に値が入っていない場合は下記の通り構造体のフィールドを除外したいです。
Go
1######################## 2{"string_1":"D","string_2":"E"} 3########################
発生している問題・エラーメッセージ
Go
1######################## 2{"string_1":"D","string_2":"E","obj_1":{},"obj_2":{}} 3########################
該当のソースコード
Go
1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6) 7 8type RequestJsonBody struct { 9 String1 string `json:"string_1,omitempty"` 10 String2 string `json:"string_2,omitempty"` 11 String3 string `json:"string_3,omitempty"` 12 Obj1 *obj1JsonBody `json:"obj_1,omitempty"` 13 Obj2 obj2JsonBody `json:"obj_2,omitempty"` 14} 15type obj1JsonBody struct { 16 Obj1string1 string `json:"obj1string_1,omitempty"` 17 Obj1string2 string `json:"obj1string_2,omitempty"` 18} 19type obj2JsonBody struct { 20 Obj2string1 uint32 `json:"obj2string_1,omitempty"` 21 Obj2string2 string `json:"obj2string_2,omitempty"` 22} 23 24func main() { 25 var varObj2string1 uint32 26 varObj2string1 = 0 27 varObj2string2 := "" 28 obj2JsonBody := obj2JsonBody{ 29 Obj2string1: varObj2string1, 30 Obj2string2: varObj2string2, 31 } 32 33 varObj1string1 := "" 34 varObj1string2 := "" 35 obj1JsonBody := obj1JsonBody{ 36 Obj1string1: varObj1string1, 37 Obj1string2: varObj1string2, 38 } 39 40 a := RequestJsonBody{ 41 String1: "D", 42 String2: "E", 43 String3: "", 44 Obj1: &obj1JsonBody, 45 Obj2: obj2JsonBody, 46 } 47 48 b, _ := json.Marshal(a) 49 fmt.Println("########################") 50 fmt.Println(string(b)) 51 fmt.Println("########################") 52}
補足情報(FW/ツールのバージョンなど)
Goのバージョンです
go version go1.18.1 linux/amd64

下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。