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.Marshaltransforma valores Go em JSONjson.Unmarshalanalisa 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
- Revisão de encoding/json
- encoding/xml
- encoding/csv
- gob e codificação binária