0Pricing
Go Academy · Lección

Repaso de encoding/json

Serialice y deserialice JSON

Repaso de encoding/json es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

JSON en Go

JSON es el formato de datos más común para las API. El paquete estándar de Go encoding/json convierte valores de Go en texto JSON y viceversa.

Marshal: de Go a JSON

json.Marshal convierte un valor de Go en un slice de bytes JSON. Conviértalo en una cadena para imprimirlo.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1, "b": 2}
	b, _ := json.Marshal(data)
	fmt.Println(string(b))
}

Serializar una estructura

Las estructuras se serializan campo por campo. Los campos exportados se convierten en claves JSON.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := json.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

Unmarshal: de JSON a Go

json.Unmarshal analiza bytes JSON y los convierte en un valor de Go. Pase un puntero para que pueda completar su variable.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	var u User
	json.Unmarshal([]byte("{\"Name\":\"Bob\",\"Age\":25}"), &u)
	fmt.Println(u)
}

Etiquetas para los nombres de las claves

Use etiquetas json para controlar los nombres de las claves, como se explicó anteriormente. Aquí, Name se asigna a la clave JSON name.

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string "json:\"name\""
}

func main() {
	b, _ := json.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Compruebe siempre los errores

Tanto Marshal como Unmarshal devuelven un error. En código real, nunca lo ignore; el JSON mal formado o los tipos no compatibles producen errores.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v int
	err := json.Unmarshal([]byte("not json"), &v)
	fmt.Println(err)
}

Decodificar en mapas

Cuando no conoce de antemano la estructura de los datos, deserialice en map[string]interface{}.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var m map[string]interface{}
	json.Unmarshal([]byte("{\"x\":1,\"y\":\"hi\"}"), &m)
	fmt.Println(m["x"], m["y"])
}

Slices y arrays

Los arrays JSON se corresponden con slices de Go. Al serializar un slice se obtiene un array JSON.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	b, _ := json.Marshal([]string{"a", "b", "c"})
	fmt.Println(string(b))
}

Impresión con formato

json.MarshalIndent añade sangría para producir una salida legible.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	data := map[string]int{"a": 1}
	b, _ := json.MarshalIndent(data, "", "  ")
	fmt.Println(string(b))
}

Los números son float64

Al decodificar en interface{}, todos los números JSON se convierten en float64 en Go. Conviértalos explícitamente si necesita un int.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	var v interface{}
	json.Unmarshal([]byte("42"), &v)
	fmt.Printf("%T %v\n", v, v)
}

Conversión de ida y vuelta

Puede serializar y después deserializar para copiar datos mediante JSON. Los valores se recuperan intactos para los tipos compatibles.

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	orig := []int{1, 2, 3}
	b, _ := json.Marshal(orig)
	var back []int
	json.Unmarshal(b, &back)
	fmt.Println(back)
}

Comprobación rápida

¿Por qué debe pasar un puntero a json.Unmarshal?

Repaso

encoding/json:

  • json.Marshal convierte valores de Go en JSON
  • json.Unmarshal analiza JSON en un puntero
  • Las etiquetas cambian el nombre de las claves; los números se decodifican como float64 en interface{}
  • Compruebe siempre el error devuelto

Preguntas frecuentes

¿La lección «Repaso de encoding/json» es gratis?

Sí — el texto completo de «Repaso de encoding/json» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Repaso de encoding/json»?

Serialice y deserialice JSON Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Repaso de encoding/json»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Repaso de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob y codificación binaria
← Volver a Go Academy