JSON, Data fields en estructuras de Golang

En el ejemplo anterior pudimos ver que una estructura de Golang es fácilmente convertible en una estructura JSON. Sin embargo debido a que Go utiliza la convención de mayúsculas para hacer propiedades públicas, al momento de realizar la conversión todas estas mayúsculas se preservan en la estructura JSON.

Para personalizar la forma en que cada propiedad de una estructura es exportada, Go ofrece los data fields, estos son definidos dentro de la misma estructura y permiten indicar la nomenclatura de cada una de las propiedades cuando están sean exportadas a otra estructura de datos (JSON en este caso).

type Pais struct {
    Nombre     string   `json:"nombre"`
    Habitantes int      `json:"habitantes"`
    Capital    string   `json:"capital"`
    Idiomas    []string `json:"idiomas"`
}

La estructura Pais ahora tiene data fields asociados a como cada uno de sus propiedades se va a exportar.

El programa completo quedaría de la siguiente forma.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type Pais struct {
    Nombre     string   `json:"nombre"`
    Habitantes int      `json:"habitantes"`
    Capital    string   `json:"capital"`
    Idiomas    []string `json:"idiomas"`
}

func main() {
    p := Pais{
        Nombre:     "Canada",
        Habitantes: 37314442,
        Capital:    "Ottawa",
        Idiomas:    []string{"Inglés", "Frances"},
    }
    datosJson, err := json.Marshal(p)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(datosJson))
}

Y al ejecutar el programa podremos ver que la nomenclatura de las propiedades en JSON se muestran como los data fields de su estructura.

> go run main.go
{"nombre":"Canada","habitantes":37314442,"capital":"Ottawa","idiomas":["Inglés","Frances"]}

Los data fields permiten agregar algunas otras características, como ignorar los campos que tienen valores vacíos.

type Pais struct {
    Nombre     string   `json:"nombre"`
    Habitantes int      `json:"habitantes,omitempty"`
    Capital    string   `json:"capital,omitempty"`
    Idiomas    []string `json:"idiomas"`
}

VPN

  • Ir a la oferta de NordVPN

Moda

Accesorios