Como converter a estrutura de Go para JSON
- Converter a estrutura Go para JSON
- Converter Estruturas Aninhadas para JSON em Go
- Indentação em Estrutura para JSON Conversão em Go
O JSON é um formato leve e independente do idioma para armazenamento e transporte de dados. Em Go, temos o pacote encoding/json
, que contém muitos métodos embutidos para operações relacionadas ao JSON. Podemos converter dados estruturais em JSON utilizando o marshaling.
Converter a estrutura Go para JSON
O método marshal
recebe objeto estruturante e retorna uma fatia de byte dos dados codificados, que podemos alterar para JSON em Go.
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
Number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", Number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
Resultado:
{"empname":"Dixya Lhyaho","empid":10}
Se mudarmos a propriedade Number
para number
, o number
é agora ignorado no processo de marshaling, uma vez que o pacote json/encoding
não pode vê-lo.
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Name string `json:"empname"`
number int `json:"empid"`
}
func main() {
employee_1 := &Employee{Name: "Dixya Lhyaho", number: 10}
e, err := json.Marshal(employee_1)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(e))
}
Resultado:
{"empname":"Dixya Lhyaho"}
Converter Estruturas Aninhadas para JSON em Go
Vamos definir uma estrutura mais complexa com estrutura aninhada. Dentro da definição da estrutura, definimos as tags JSON que mapeiam os campos de nossas estruturas diretamente para os campos em nosso JSON marshal.
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.Marshal(employee)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
Resultado:
{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}
Indentação em Estrutura para JSON Conversão em Go
Podemos utilizar a função json.MarshalIndent()
em vez da função json.Marshal()
para imprimir o JSON em um formato mais legível. Passamos dois argumentos adicionais, prefixar string
e a função indent string
para MarshalIndent
.
package main
import (
"encoding/json"
"fmt"
)
type Employee struct {
Position string `json:"position"`
Name Name `json:"name"`
}
type Name struct {
FirstName string `json:"firstname"`
Surname string `json:"surname"`
}
func main() {
name := Name{FirstName: "Dikxya", Surname: "Lhyaho"}
employee := Employee{Position: "Senior Developer", Name: name}
byteArray, err := json.MarshalIndent(employee, "", " ")
if err != nil {
fmt.Println(err)
}
fmt.Println(string(byteArray))
}
Resultado:
{
"position": "Senior Developer",
"name": {
"firstname": "Dikxya",
"surname": "Lhyaho"
}
}
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn