Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

134
Visualizações
Serialize deserialize from Go int64/uint64 from/to Javascript string

Is it possible to modify json serialization and deserialization so that a struct like this:

type Foo struct {
   A int64
   B uint64
   // and other stuff with int64 and uint64 and there's a lot of struct that are like this
}

x := Foo{A: 1234567890987654, B: 987654321012345678}
byt, err := json.Marshal(x)
fmt.Println(err)
fmt.Println(string(byt))

//                                 9223372036854775808      9223372036854775808
err = json.Unmarshal([]byte(`{"A":"12345678901234567", "B":"98765432101234567"}`), &x)
// ^ must be quoted since javascript can't represent those values properly (2^53)
// ^ json: cannot unmarshal string into Go struct field Foo.A of type int64
fmt.Println(err)
fmt.Printf("%#v\n", x)
// main.Foo{A:1234567890987654, B:0xdb4da5f44d20b4e}

https://play.golang.org/p/dHN-FcJ7p-N

So that It could receive json string but parsed as int64/uint64, and can deserialize int64/uint64 as json string without have to modify the struct or struct tag at all

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Use the string option in the JSON struct tag. It's designed exactly for this use case:

The "string" option signals that a field is stored as JSON inside a JSON-encoded string. It applies only to fields of string, floating point, integer, or boolean types. This extra level of encoding is sometimes used when communicating with JavaScript programs

type Foo struct {
    A int64  `json:"A,string"`
    B uint64 `json:"B,string"`
}

func main() {
    x := &Foo{}
    _ = json.Unmarshal([]byte(`{"A":"12345678901234567", "B":"98765432101234567"}`), x)

    fmt.Println(x) // &{12345678901234567 98765432101234567}

    b, _ := json.Marshal(x)

    fmt.Println(string(b)) // {"A":"12345678901234567","B":"98765432101234567"}
}

Playground: https://play.golang.org/p/IfpcYOlcKMo

If you can't modify existing struct tags (but your example has none), then you have to reinvent the implementation of this string tag option in a custom UnmarshalJSON and MarshalJSON methods.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda