Estou tentando converter uma estrutura Go para JSON usando o json
pacote, mas tudo o que recebo é {}
. Estou certo de que é algo totalmente óbvio, mas não o vejo.
package main
import (
"fmt"
"encoding/json"
)
type User struct {
name string
}
func main() {
user := &User{name:"Frank"}
b, err := json.Marshal(user)
if err != nil {
fmt.Printf("Error: %s", err)
return;
}
fmt.Println(string(b))
}
Então, quando tento executá-lo, recebo o seguinte:
$ 6g test.go && 6l -o test test.6 && ./test
{}
`json:"name"`
ao final da definição do campo struct para preservar o nome da saída.Assunto relacionado:
Eu estava tendo problemas para converter struct em JSON, enviando-o como resposta da Golang e depois capturando o mesmo em JavaScript via Ajax.
Perdi muito tempo, então postando a solução aqui.
Em Go:
Em JavaScript:
Espero que isso ajude alguém.
Boa sorte.
fonte
Os valores de estrutura são codificados como objetos JSON. Cada campo de estrutura exportado se torna um membro do objeto, a menos que:
Os valores vazios são falsos, 0, qualquer ponteiro nulo ou valor de interface e qualquer matriz, fatia, mapa ou sequência de comprimento zero. A cadeia de chave padrão do objeto é o nome do campo struct, mas pode ser especificada no valor da tag do campo struct. A chave "json" no valor da tag do campo struct é o nome da chave, seguido por uma vírgula e opções opcionais.
fonte
Você pode definir seus próprios métodos MarshalJSON e UnmarshalJSON personalizados e controlar intencionalmente o que deve ser incluído, por exemplo:
fonte