🥇 JSON, Data fields en estructuras de Golang.

En el ejemplo anterior pudimos ver que una estructura de Golang es facilmente convertible en una estructura JSON. Sin embargo debido a que Go utiliza la convención de mayúsculas para hacer propieades 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 estan 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 vacios.

type Pais struct {
    Nombre     string   `json:"nombre"`
    Habitantes int      `json:"habitantes,omitempty"`
    Capital    string   `json:"capital,omitempty"`
    Idiomas    []string `json:"idiomas"`
}
JSON, Uso de JSON en Golang. JSON, Como decodificar.
comments powered by Disqus