🐵
Jsonデータを構造体に定義してない部分も取得したい Go
データをjsonで返すときに動的にフィールドへ追加するのはどうするのか調べたのでメモ
例えば
type Struct struct {
Value_first string `json:"value"`
Value_second string `json:"value_one"`
Nest Nested `json:"nest"`
}
これでjson.Marshalしても定義以外はスルーして上3つしか返してくれません。
他も追加したいときの方法として一例を挙げます
import "encoding/json"
type FakeStruct struct
func (s Struct) MarshalJSON() ([]byte, error) {
return json.Marshal(struct {
FakeStruct
AddData map[string]string `json:"add_data"`
}{
FakeStruct: FakeItem(s),
AddData: map[string]string{"something": "something"},
})
}
これで以下のようにすればAddDataの部分が追加されてると思います
out, err := json.MarshalIndent(struct, "", " ")
if err != nil {
log.Fatalln(err)
}
fmt.Println(string(out))
他にも関数内で直接struct定義するやり方もあるっぽいです
func (s Struct) MarshalJSON() ([]byte, error) {
return struct {
FakeStruct
NewStruct struct {
AddData string `json:"add_data"`
} `json:"new_struct"`
}{
FakeStruct: FakeStruct(*s),
NewStruct: struct {
AddData string `json:"add_data"`
}{
AddData: "yes!",
},
}
})
一応stack overflowを参考にはしてるんですけど、どれも5年前以上なのが気になる,,
Discussion