Codificar y decodificar JSON con Go/GoLang

Publicado por parzibyte en

Codificar y decodificar JSON en Go con Marshal y Unmarshal

JSON y Go

En este post voy a explicar cómo codificar y decodificar el formato JSON (JavaScript Object Notation) usando el lenguaje de programación Go, también conocido como Golang.

Para hacerlo no necesitamos librerías externas ni paquetes extraños; solamente a encoding/json con las funciones Marshal y Unmarshal que nos permitirán trabajar con structs, arreglos, cadenas y todos los tipos de datos.

Codificar y decodificar JSON en Go con Marshal y Unmarshal

Codificar y decodificar JSON en Go con Marshal y Unmarshal

Nota: esto ya lo hicimos con PHP, Java y JavaScript.

Convertir a JSON con Go

Para codificar a JSON usamos la función json.Marshal. Esta función recibe el valor que vamos a codificar, el cual es de tipo interface{} es decir, de cualquier tipo (cadenas, structs, enteros).

Devuelve un arreglo de bytes []byte y un posible error. Para convertir el arreglo de bytes a cadena simplemente usamos la función string(). Ya veremos el ejemplo de código:

En el código estamos codificando varios tipos de datos. Como lo dije, se devuelve un posible error que, en caso de que todo sea exitoso, estará en nil.

Dentro del código también puse un ejemplo de cómo codificar un struct, que es algo así como una Clase en Go.

Resumiendo:

  1. Para codificar llama a json.Marshal, el cual devuelve un arreglo de bytes que puedes convertir a cadena con string().
  2. El método acepta todos los tipos de datos, o bueno, casi todos. También acepta mapas. Recuerda que puedes poner un struct dentro de otro struct, así como arreglos y todo tipo de datos

Decodificar JSON con Go

Para hacer el proceso inverso llamamos a json.Unmarshal que recibe dos argumentos y devuelve un error que puede ser nil.

El primer argumento es un arreglo de bytes (podemos convertir un string a arreglo de bytes con []byte()) y el segundo es el apuntador a una variable de cualquier tipo, en donde serán almacenados los datos decodificados.

Recordemos que el apuntador (bueno, la dirección de memoria que apunta a la variable) se toma con el ampersand &. Para decodificar, por lo tanto, se necesita definir la variable antes de llamar a json.Unmarshal. Veremos los ejemplos.

Tal vez se vea algo raro la utilización de backticks pero es para poner los datos como JSON codificados sin tener que escapar las comillas. En la vida real ese JSON podría venir de una petición, ser leído de un archivo o cosas de esas.

Resumiendo:

  1. Define la variable (de cualquier tipo, pero que coincida con el JSON) en donde pondrás los datos decodificados.
  2. Llama a json.Unmarshal, pásale la cadena JSON como un arreglo de bytes y el apuntador a la variable, maneja el posible error y listo: si todo sale bien podrás acceder a la variable

Usos de JSON en Go

Los usos son los mismos que en otros lenguajes de programación, pero específicamente hablando de Go puedo decir que la API de Sublime POS 3 utiliza JSON para el intercambio de datos.

Probar ejercicios

Puedes probar los ejercicios que acabamos de ver en línea, o descargarlos. Si los descargas recuerda instalar y configurar Go.

He escrito más tutoriales sobre Go, por favor míralos.

Como referencia dejo un enlace al blog oficial de Go.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

1 Comment

Petición POST, GET, PUT y DELETE en Go con net/http - Parzibyte's blog · mayo 21, 2019 a las 9:17 pm

[…] importa el paquete net/http; es lo único que necesitas para las conexiones HTTP, aunque si vas a codificar con JSON debes importar […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: