0Pricing
Go Academy · Aula

Revisão de encoding/json

Faça marshal e unmarshal de JSON

Revisão de encoding/json é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

JSON em Go

JSON é o formato de dados mais comum para APIs. O pacote padrão encoding/json do Go converte valores Go em texto JSON.

Marshal: de Go para JSON

json.Marshal transforma um valor Go em uma fatia de bytes JSON. Converta-a em uma cadeia de caracteres para imprimi-la.

package main

import (
	"encoding/json"
	"fmt"
)

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

Serializando uma estrutura

As estruturas são serializadas campo a campo. Os campos exportados tornam-se chaves 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 para Go

json.Unmarshal analisa bytes JSON e os coloca em um valor Go. Passe um ponteiro para que ele possa preencher sua variável.

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)
}

Tags para nomes de chaves

Use tags json para controlar os nomes das chaves, como explicado anteriormente. Aqui, Name é associado ao nome da chave JSON.

package main

import (
	"encoding/json"
	"fmt"
)

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

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

Sempre verifique os erros

Tanto Marshal quanto Unmarshal retornam um erro. No código real, nunca o ignore; JSON malformado ou tipos incompatíveis produzem erros.

package main

import (
	"encoding/json"
	"fmt"
)

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

Decodificando em mapas

Quando você não sabe antecipadamente qual será a estrutura, faça o unmarshal em 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"])
}

Fatias e matrizes

Matrizes JSON correspondem a fatias Go. Serializar uma fatia produz uma matriz JSON.

package main

import (
	"encoding/json"
	"fmt"
)

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

Formatação legível

json.MarshalIndent adiciona indentação para produzir uma saída legível por humanos.

package main

import (
	"encoding/json"
	"fmt"
)

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

Números são float64

Ao decodificar em interface{}, todos os números JSON se tornam float64 em Go. Faça uma conversão explícita se precisar de um int.

package main

import (
	"encoding/json"
	"fmt"
)

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

Ciclo de ida e volta

Você pode fazer marshal e depois unmarshal para copiar dados por meio de JSON. Os valores retornam intactos para os tipos compatíveis.

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)
}

Verificação rápida

Por que é necessário passar um ponteiro para json.Unmarshal?

Recapitulação

encoding/json:

  • json.Marshal transforma valores Go em JSON
  • json.Unmarshal analisa JSON em um ponteiro
  • As tags renomeiam chaves; os números são decodificados como float64 em interface{}
  • Sempre verifique o erro retornado

Perguntas Frequentes

A aula “Revisão de encoding/json” é grátis?

Sim — o texto completo de “Revisão de encoding/json” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “Revisão de encoding/json”?

Faça marshal e unmarshal de JSON Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Revisão de encoding/json”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Revisão de encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob e codificação binária
← Voltar para Go Academy