Cómo convertir la estructura de Go en JSON

  1. Convierta Go struct a JSON
  2. Convertir Structs anidadas en JSON en Go
  3. 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"
  }
}
comments powered by Disqus