JSON (Notación de objetos de JavaScript) es un formato de datos muy versátil y muy popular. A menudo se usa para la comunicación entre aplicaciones web y también como una forma conveniente de almacenar grandes cantidades de datos de aplicaciones estructuradas.

JSON es tan útil que casi todos los lenguajes de programación modernos brindan soporte integrado para trabajar con él, incluido Go.

Trabajando con JSON en Go

Puede dividir la mayor parte del trabajo que realizará con JSON en dos categorías generales: cálculo de referencias y desclasificación. Wikipedia define marshalling como:

En informática, marshaling es el proceso de transformar la representación de la memoria de un objeto en un formato de datos adecuado para el almacenamiento o la transmisión. Por lo general, se usa cuando los datos se deben mover entre diferentes partes de un programa de computadora o de un programa a otro.

En términos más simples, serializar es el proceso de convertir datos almacenados en una variable en una forma que sea más fácil de pasar a otro programa. Unmarshaling es el proceso inverso: implica tomar datos formateados para el transporte y convertirlos a una forma que sea más fácil de usar para su programa.

instagram viewer

Con Go, puede ordenar estructuras de datos nativos en JSON. Y puede realizar la acción inversa, descomponiendo los datos JSON en variables Go.

Marshalling a JSON en Go

Ir proporciona la paquete de codificación/json para facilitarle el trabajo con JSON. Este paquete contiene varias funciones, pero la que usará para ordenar es la Mariscal función. Mariscal tiene la siguiente firma de función:

func Mariscal (v interfaz{}) ([]byte, error)

Esto significa que Mariscal acepta un parámetro de cualquier tipo de datos y devuelve dos valores: una porción de bytes y un error. En otras palabras, llamas Mariscal con un valor Go, lo convierte a JSON y devuelve el equivalente de JSON. Si encuentra un error durante el proceso de conversión, devolverá el error y una porción vacía.

Aquí hay un ejemplo de código que usa Mariscal para convertir un mapa a JSON. Para ejecutar este ejemplo, todo lo que necesita es crear un archivo Go en tu editor de código favorito, o utilice el ir al patio de recreo:

paquete principal

importar (
"codificación/json"
"fmt"
)

función principal(){
val := mapa[cadena]En t{
"John": 25,
"María": 19,
"Adán": 5,
}

res, _ := json. Mariscal (val)
fmt.Imprimir(cadena(resolución))
}

Si ejecuta ese código, generará lo siguiente:

Como se mencionó anteriormente, puede ordenar cualquier tipo de datos de Go en JSON, aunque en la vida real, por lo general, estará ordenando estructuras. Debido a esto, Go proporciona una función llamada etiquetas de estructura que le permite dar Mariscal instrucciones adicionales para convertir sus estructuras.

Una etiqueta de estructura es una cadena que incluye en su declaración de estructura junto al tipo de datos de un campo. Las etiquetas de estructura le permiten ajustar la forma Mariscal trata el campo al que pertenece la etiqueta. Puede usar etiquetas de estructura para cambiar el nombre de un campo en la salida JSON, o incluso omitirlo por completo. Etiquetas de estructura (que Mariscal reconoce) comienzan con la subcadena "json:".

Como ejemplo, supongamos que tiene una estructura Auto que representa alguna información sobre un coche. Aquí está el código para crear un Auto y ordenarlo a JSON:

paquete principal

importar (
"codificación/json"
"fmt"
)

función principal(){
tipo Estructura del coche {
Cadena de marca
Cadena modelo
Precio En t
}
val := Coche{Marca: "mercedes", Modelo: "Benz", Precio: 50000}
res, _ := json. Mariscal (val)
fmt.Imprimir(cadena(resolución))
}

Este código produce la salida:

El Marca, Modelo, y Precio campos de Auto necesita comenzar con letras mayúsculas, o Mariscal no podrá convertirlos. Esto da como resultado que los campos de salida JSON también comiencen con mayúsculas. Pero, ¿qué sucede si desea que los nombres comiencen con minúsculas en el JSON, o si desea cambiar el nombre de un campo por completo? Ahí es donde entran las etiquetas de estructura. Aquí hay un ejemplo:

paquete principal
importar (
"codificación/json"
"fmt"
)
función principal(){
tipo Estructura del coche {
ID int `json:"-"`
Cadena de marca `json:"tipo"`
Modelo de cadena `json:"modelo"`
Precio int`json:"precio"`
}
val := Car{ID: 0, Marca: "mercedes", Modelo: "Benz", Precio: 50000}
res, _ := json. Mariscal (val)
fmt.Imprimir(cadena(resolución))
}

Este código introduce un nuevo campo ID que Mariscal se omite de la salida JSON a través de una etiqueta de estructura. El código también usa etiquetas de estructura para cambiar el nombre de los otros campos de estructura. Aquí está la salida del programa:

Como puede ver, la parte de la etiqueta de estructura que sigue a "json:" se convierte en el nombre del campo en la salida de Marshal. Hay una excepción: si es la cadena "-", Marshal omite ese campo de la salida. Puede leer más sobre las etiquetas Marshal y struct en el Ir documentación.

Desmarshaling de JSON en Go

El paquete encoding/json también proporciona una función de desclasificación, llamada desmantelar. Tiene la siguiente firma de función:

func Unmarshal (datos []byte, v interfaz{}) error

A diferencia de Mariscal, desmantelar no devuelve un valor. En su lugar, acepta JSON como una porción de bytes en el primer argumento y luego almacena los datos convertidos en el objeto al que apunta su segundo argumento. desmantelar también funciona con etiquetas de estructura, pero aquí, las etiquetas indican desmantelar qué campos JSON coinciden con qué campos de estructura.

Al desarmar en un programa, es posible que obtener datos de una API, pero aquí usará datos ficticios. Así es como se usa desmantelar:

paquete principal

importar (
"codificación/json"
"fmt"
)

función principal(){
tipo Estructura del coche {
ID int `json:"-"`
Cadena de marca `json:"tipo"`
Modelo de cadena `json:"modelo"`
Precio int`json:"precio"`
}

entrada json := `{
"tipo": "Toyota",
"modelo": "Camry",
"precio": 2000
}`

variable jsonCoche de salida
error: = json. Desmontar([]byte(entrada json), & salida json)

si yerra != nil {
fmt. imprimir("¡Error de decodificación JSON!")
devolver
}

fmt.Imprimir(salida json)
}

Este código usa el mismo tipo Car que el ejemplo anterior y descompone un objeto JSON en una estructura de tipo Car, luego imprime los datos en la estructura. Cuando se ejecuta, el programa produce esta salida:

Esto muestra que los datos JSON ficticios se desarmaron con éxito en el salida json estructura

Go facilita el trabajo con JSON

Con el paquete de codificación/json, trabajar con JSON en Go es tan simple como dos llamadas a funciones: Marshall y Unmarshal. Go también le permite personalizar el proceso de clasificación/desclasificación de JSON con etiquetas de estructura.

Convertir datos a JSON es una excelente manera de compartirlos con otro programa o proceso. El formato es tan universal que JSON es lo más portátil posible.