Trabalhando com JSON em Go: parsing e serialização para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução ao trabalho com JSON em Go



JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em desenvolvimento web, APIs e arquivos de configuração. A linguagem Go (Golang) fornece o pacote embutido encoding/json, que permite realizar facilmente parsing (decodificação) e serialização (codificação) de dados. Neste artigo, abordaremos os fundamentos do trabalho com JSON em Go com exemplos práticos, compreensíveis até mesmo para desenvolvedores iniciantes.



Fundamentos do pacote encoding/json



O pacote encoding/json é uma biblioteca padrão do Go que não requer instalação adicional. As duas principais ferramentas neste pacote são as funções json.Marshal (serialização) e json.Unmarshal (desserialização).



Estruturas e tags JSON



Em Go, os dados geralmente são representados na forma de estruturas (struct). Para gerenciar os nomes dos campos em JSON, são usadas tags. Vejamos um exemplo simples:



package main

import ( "encoding/json" "fmt")

// Definimos uma estrutura com tags JSONtype Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` IsAdmin bool `json:"is_admin"`}

func main() { // Criamos uma instância da estrutura person := Person{ Name: "João Silva", Age: 30, Email: "joao@example.com", IsAdmin: true, } // Serializamos para JSON jsonData, _ := json.Marshal(person) fmt.Println(string(jsonData))}


Resultado da execução:



{"name":"João Silva","age":30,"email":"joao@example.com","is_admin":true}


Pontos importantes:

  • A tag json:"name" indica como o campo será nomeado no JSON
  • A opção omitempty omite campos vazios (valores zero)
  • Os campos da estrutura devem ser exportáveis (começar com letra maiúscula)


Serialização (Marshal) de dados em JSON



Serialização é o processo de converter uma estrutura Go ou outro tipo de dados em uma string JSON. A função json.Marshal retorna um slice de bytes ([]byte) e um erro.



Exemplos de serialização de diferentes tipos



package main

import ( "encoding/json" "fmt")

type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` Tags []string `json:"tags,omitempty"` InStock bool `json:"in_stock"`}

func main() { // Serialização de uma estrutura product := Product{ ID: 101, Name: "Notebook", Price: 79999.99, Tags: []string{"eletrônicos", "notebooks"}, InStock: true, } // Saída formatada com indentação jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData)) // Serialização de um slice de estruturas products := []Product{ {ID: 1, Name: "Mouse", Price: 1500.00, InStock: true}, {ID: 2, Name: "Teclado", Price: 3500.00, InStock: false}, } jsonArray, _ := json.Marshal(products) fmt.Println(string(jsonArray))}


Resultado:



{  "id": 101,  "name": "Notebook",  "price": 79999.99,  "tags": [    "eletrônicos",    "notebooks"  ],  "in_stock": true}[{"id":1,"name":"Mouse","price":1500,"in_stock":true},{"id":2,"name":"Teclado","price":3500,"in_stock":false}]


Parsing (Unmarshal) de JSON em Go



Parsing é o processo inverso: converter uma string JSON em uma estrutura Go. Para isso, utiliza-se a função json.Unmarshal.



Exemplo básico de parsing



package main

import ( "encoding/json" "fmt" "log")

type User struct { Username string `json:"username"` Age

Blogs

Book Recommendations