"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como implementar UNARSHALJSON para tipos escalares derivados em Go?

Como implementar UNARSHALJSON para tipos escalares derivados em Go?

Postado em 2025-04-13
Navegar:374

How to Implement UnmarshalJSON for Derived Scalar Types in Go?

implementação unmarshaljson para escalares derivados em go

Problem:
um tipo personalizado que converte subtigelas constantes para strings e vice Isso é desafiador porque o Unarshaljson não fornece uma maneira de modificar o valor escalar sem usar uma estrutura. Método un -shaljson para modificar o valor do receptor.

uNarshal para uma string:
uncarshal o texto json em uma string simples, removendo todo o JSON Quoting.

o valor da string. Atribua o resultado ao receptor. var s string se err: = json.unmarshal (dados, & s); err! = nil { retornar err } *intvalue = pesquisa (s) retornar nil }

Exemplo de código:

pacote main importação ( "Encoding/JSON" "FMT" ) Digite PersonId Int const ( Bob Personid = iota Jane Ralph Ninguém = -1 ) var nameMap = map [string] PersonId { "Bob": Bob, "Jane": Jane, "Ralph": Ralph, "Ninguém": ninguém, } var idmap = map [personid] string { Bob: "Bob", Jane: "Jane", Ralph: "Ralph", Ninguém: "ninguém", } func (intvalue PersonId) name () string { Retornar idmap [intvalue] } Func Lookup (Name String) Personid { Retornar NameMap [nome] } func (intvalue *PersonId) UNARSHALJSON (Data [] byte) Erro { var s string se err: = json.unmarshal (dados, & s); err! = nil { retornar err } *intvalue = pesquisa (s) retornar nil } Digite mytype struct { Person PersonId `JSON:" Pessoa "` Conde int `JSON:" Count "` String de cumprimento `JSON:" saudação "` } func main () { var m MyType se err: = json.unmarshal ([] byte (`{" pessoa ":" ralph "," count ": 4," saudação ":" hello "}`), & m); err! = nil { fmt.println (err) } outro { para i: = 0; I output:

hello ralph Olá Ralph Olá Ralph Olá Ralph

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3