Golang múltiples nombres de etiquetas json para un campo

Resuelto William Poussier asked hace 8 años • 2 respuestas

¿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"`
}
William Poussier avatar Aug 07 '16 05:08 William Poussier
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}
Zhang avatar Jun 21 '2018 10:06 Zhang

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
}
Mayank Patel avatar Aug 06 '2016 22:08 Mayank Patel