Golang múltiples nombres de etiquetas json para un campo
¿Es posible en Golang usar más de un nombre para una etiqueta de estructura JSON?
type Animation struct {
Name string `json:"name"`
Repeat int `json:"repeat"`
Speed uint `json:"speed"`
Pattern Pattern `json:"pattern",json:"frames"`
}
Aceptado
puede usar varias etiquetas json con una tercera parte json lib como github.com/json-iterator/go
codificación como se muestra a continuación:
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}
Consulte Cómo definir varias etiquetas de nombre en una estructura para saber cómo definir varias etiquetas en un campo de estructura.
También puedes usar a type Info map[string]interface{}
en lugar de tu estructura.
O puede usar ambos tipos en su estructura y crear un método Details()
que devolverá el patrón correcto.
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
}