package main import ( "encoding/json" "fmt" )
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}
func Unmarshal(data []byte, v interface{}) errorAhora 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
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"]
De una pagina con formato JSON le puedo cambiar la interfaz para que un usuario lo puede diligenciar mejor?