Instanciando la librería JSON en Go
Al inicio de nuestro código debemos instanciar las siguientes librerías mínimas para poder trabajar con JSON:package main
import (
"encoding/json"
"fmt"
)
Encoding con Marshal
La función Json.Marshal recibe los datos con las características de mi objeto en bytes para luego convertirlos a JSON. La sintaxis de esta función es la siguiente:func Marshal(v interface{}) ([]byte, error)
Veamos un ejemplo usando json.Marshal. Tenemos un auto con ciertas características como Modelo, Año, Kilometraje, Color, Capacidad de Almacenamiento de Gasolina en el Tanque y si es Usado o no. Creamos un archivo de ejemplo llamado ejemplo_marshal.go:
// Instancio Go y JSON
package main
import (
"encoding/json"
"fmt"
)
// Defino los tipos de Datos de mi aplicación.
type Auto struct {
ID int
Modelo string
Año string
Kilometraje string
Color string
Tanque string
Usado bool
}
// Creamos una Instancia con las Características del Auto.
func main() {
auto := Auto{
ID: 1,
Modelo: "Toyota Yaris",
Año: "2014",
Kilometraje: "120 Km x Hora",
Color: "Amarillo",
Tanque: "10 Litros",
Usado: true,
}
// Creamos nuestro JSON a partir de los datos que obtenemos desde la instancia Creada con las Características del Auto.
crear_json, _ := json.Marshal(auto)
// Convertimos los datos(bytes) en una cadena e imprimimos el contenido.
convertir_a_cadena := string(crear_json)
fmt.Println(convertir_a_cadena)
}
Luego de ejecutar el comando:
go run ejemplo_marshal.goObtemos el resultado siguiente:
{"ID":1,"Modelo":"Toyota Yaris","Año":"2014","Kilometraje":"120 Km x Hora","Color":"Amarillo","Tanque":"10 Litros","Usado":true}
Encoding con Unmarshal
Esta función nos ayuda a deserializar nuestro array JSON de manera a obtener datos útiles. Asimismo podemos emplearlo para afectar la estructura del JSON a mostrarse y muchas más tareas. La sintaxis de esta función es la siguiente:func Unmarshal(data []byte, v interface{}) error
Ahora veamos un ejemplo usando json.Unmarshal. Imaginemos que tenemos una lista de edades de ciertas Personas y que deseamos la cantidad de edades que existen dentro de ese array. Creamos un archivo de ejemplo llamado ejemplo_unmarshal.go:
// Instancio JSON.
package main
import (
"encoding/json"
"fmt"
)
type Resultados struct {
Edades []int
}
func main() {
// Defino los objetos de mi array JSON.
text := "{\"Edades\": [18, 20, 30, 35, 50, -12]}"
// Get bytes.
bytes := []byte(text)
// Decodifico la estructura con Unmarshal.
var resultados Resultados
json.Unmarshal(bytes, &resultados)
// Obtenemos los datos.
fmt.Printf("Edades = %v", resultados.Edades)
fmt.Println()
// Contamos la cantidad de objetos en mi array y los imprimo.
fmt.Printf("Cantidad = %v", len(resultados.Edades))
fmt.Println()
}
Luego de ejecutar el comando:
go run ejemplo_unmarshal.goObtenemos un array de datos con las edades y la cantidad de edades que hay en el array
Edades = [18 20 30 35 50 -12] Cantidad = 6
Decodificación arbitraria de datos
Imaginemos que tenemos un solo modelo de auto pero que este tiene 5 colores; entonces debemos asignarle una columna llamada Colores dentro del array json:auto := []byte(`{"ID:1, Modelo: Kia Picasso, Año: 2016, Kilometraje: 120 Km x hora, Tanque: 15 Litros, Usado: false, Colores":["Plateado, Rojo, Azul, Negro, Verde"]}`)
Para leer este subdato 'colores' del objeto auto, empleamos lo siguiente:
map[string]interface{}:
Entonces si creamos un archivo llamado ejemplo_da.go, queda así:
// Instancio Go y JSON
package main
import (
"encoding/json"
"fmt"
)
// Defino los tipos de Datos de mi aplicación.
type Auto struct {
ID int
Modelo string
Año string
Kilometraje string
Tanque string
Usado bool
Colores []string
}
// Creamos una Instancia con las Características del Auto.
func main() {
auto := []byte(`{"ID:1, Modelo: Kia Picasso, Año: 2016, Kilometraje: 120 Km x hora, Tanque: 15 Litros, Usado: false, Colores":["Plateado, Rojo, Azul, Negro, Verde"]}`)
// Creamos nuestro JSON a partir de los datos que obtenemos desde la instancia Creada con las Características del Auto.
var colores interface{}
json.Unmarshal(auto, &colores)
m := colores.(map[string]interface{})
// Convertimps los datos(bytes) en una cadena e imprimimos el contenido.
fmt.Println(m)
}
También puedes ver arriba que obtenemos un array con las características del auto y los colores de su modelo luego de ejecutar el comando
go run ejemplo_da.go
//Resultado map[ID:1, Modelo: Kia Picasso, Año: 2016, Kilometraje: 120 Km x hora, Tanque: 15 Litros, Usado: false, Colores:[Plateado, Rojo, Azul, Negro, Verde]]Si te interesa este tema, puedes aprender mucho más en el curso avanzado de Go en Platzi por el profesor Ivan Jaimes.
[maxbutton id="2"]
Educación online efectiva
Aprende con expertos de la industria
COMPARTE ESTE ARTÍCULO Y MUESTRA LO QUE APRENDISTE
0 Comentarios
para escribir tu comentario








