GolangでJSON構造体タグに複数の名前を使用することは可能ですか?
type Animation struct {
Name string `json:"name"`
Repeat int `json:"repeat"`
Speed uint `json:"speed"`
Pattern Pattern `json:"pattern",json:"frames"`
}
1つの構造体フィールドに複数のタグを定義する方法については、 構造体に複数の名前タグを定義する方法 を参照してください。
構造体の代わりに_type Info map[string]interface{}
_を使用することもできます。
または、構造体で両方のタイプを使用して、正しいパターンを返すメソッドDetails()
を作成することもできます。
_type Animation struct {
Name string `json:"name"`
Repeat int `json:"repeat"`
Speed uint `json:"speed"`
Pattern Pattern `json:"pattern"`
Frame Pattern `json:"frames"`
}
func (a Animation) Details() Pattern {
if a.Pattern == nil {
return a.Frame
}
return a.Pattern
}
_
以下のようなgithub.com/json-iterator/go
コーディングのような3番目の部分のjsonlibで複数のjsonタグを使用できます。
package main
import (
"fmt"
"github.com/json-iterator/go"
)
type TestJson struct {
Name string `json:"name" newtag:"newname"`
Age int `json:"age" newtag:"newage"`
}
func main() {
var json = jsoniter.ConfigCompatibleWithStandardLibrary
data := TestJson{}
data.Name = "zhangsan"
data.Age = 22
byt, _ := json.Marshal(&data)
fmt.Println(string(byt))
var NewJson = jsoniter.Config{
EscapeHTML: true,
SortMapKeys: true,
ValidateJsonRawMessage: true,
TagKey: "newtag",
}.Froze()
byt, _ = NewJson.Marshal(&data)
fmt.Println(string(byt))
}
output:
{"name":"zhangsan","age":22}
{"newname":"zhangsan","newage":22}