Cómo convertir la estructura de Go en JSON
- Convierta Go struct a JSON
- Convertir Structs anidadas en JSON en Go
- Indentación en la estructura a la conversión de JSON en Go
JSON es un formato ligero e independiente del lenguaje para almacenar y transportar datos. En Go, tenemos el paquete encoding/json
, que contiene muchos métodos incorporados para las operaciones relacionadas con JSON. Podemos convertir los datos estructurales en JSON usando el marshaling.
Convierta Go struct a JSON
El método marshal
recibe el objeto struct y devuelve un trozo de byte de los datos codificados, que podemos cambiar a JSON en 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))
}
Producción :
{"empname":"Dixya Lhyaho","empid":10}
Si cambiamos la propiedad Number
por number
, number
es ahora ignorado en el proceso marshal
ya que el paquete json/encoding
no puede verlo.
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))
}
Producción :
{"empname":"Dixya Lhyaho"}
Convertir Structs anidadas en JSON en Go
Definamos una estructura más compleja con estructura anidada. Dentro de la definición de la estructura, definimos las etiquetas JSON que mapean los campos de nuestras estructuras directamente a los campos de nuestro JSON anidado.
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))
}
Producción :
{"position":"Senior Developer","name":{"firstname":"Dikxya","surname":"Lhyaho"}}
Indentación en la estructura a la conversión de JSON en Go
Podemos usar la función json.MarshalIndent()
en lugar de la función json.Marshal()
para imprimir JSON en un formato más legible. Pasamos dos argumentos adicionales, cadena de prefijos
y la cadena de indicios
a 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))
}
Producción :
{
"position": "Senior Developer",
"name": {
"firstname": "Dikxya",
"surname": "Lhyaho"
}
}
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn