Escolar Documentos
Profissional Documentos
Cultura Documentos
A verdade é que já existem muitas formas de ler um arquivo JSON usando o golang,
mas hoje vamos restringir o nosso estudo a um parsing usando apenas o pacotes da
biblioteca padrão da linguagem (o GO tem milhares de pacotes ‘nativos’, por assim
dizer, que facilitam nossa vida mantendo o programa leve).
Vamos lá!
Passo 1 – Ferramentas
Todo programa em go precisa de um arquivo inicial, conhecido como main, que vai
ser executado ao inicializarmos a aplicação.
Aqui vamos exemplificar com esse arquivo, mas todo arquivo em go tem basicamente
a mesma estrutura, que é essa abaixo:
package main //nome do package. Como estamos na raiz do programa o nome da package será "main"
import (
func main() {
Vamos trabalhar com um objeto bem simples (por enquanto, muHAhaAHhah), que
vai conter algumas propriedades de um objeto livro, conforme apresentado no trecho
abaixo:
"publisher":"Casa do código",
"link":"https://www.casadocodigo.com.br/products/livro-google-go"}
Para converter essa estrutura JSON para uma struct – é assim que chamamos classes
em GO – podemos usar a ferramenta JSON-to-Go.
Basta colar o json lá que ela converte para o formato de classe do GO rapidinho,
precisando apenas ajustar seu nome ou quebrar em mais structs, se necessário.
Pacotes
Aqui vamos usar a função Open do pacote nativo os. Para utilizarmos os pacotes no
Golang basta importarmos o pacote através da instrução abaixo:
import (
Aqui nessa POC vamos trabalhar apenas com pacotes nativos, conforme a imagem
abaixo:
import (
"fmt"
"io/ioutil"
"os"
"encoding/json")
No trecho abaixo estamos abrindo nosso arquivo JSON através da função os.Open,
que além de retornar o arquivo jsonFile, retorna um objeto do tipo error, para que
seja possível verificar se houve algum erro na abertura do arquivo:
Error
if err != nil {
fmt.Println(err)
Esse trecho será usado sempre que as funções retornarem erros para podermos realizar
alguma tratativa em relação a eles.
Dispose e Defer
Uma boa prática é sempre fechar, ou dar dispose, nos objetos que utilizamos, para
não ocuparmos memória, tão pouco recursos de I/O, desnecessários durante a
execução do programa.
Contudo, não existe essa funcionalidade para a gestão de recursos de I/O, como
conexão de rede, conexão de banco de dados ou arquivos físicos. Para fazer isso
temos um instrução que auxilia nessa finalidade: o defer. Essa instrução é executada
no fim de cada função com o bloco de código que inserirmos. Com o código abaixo
fechamos o arquivo “jsonFile” ao fim da função.
defer jsonFile.Close()
Para conseguir manipular o nosso json dentro de um objeto Book, vamos precisar
transformar nosso arquivo primeiro em um array de bytes para depois utilizar a
função json.Unmarshal para transformar os bytes em um objeto Book. No código é
exatamente o que estamos fazendo.
//Aqui o arquivo é convertido para uma variável array de bytes, através do pacote "io/ioutil"
objBook := Book{}
//Conversão da variável byte em um objeto do tipo struct Book
json.Unmarshal(byteValueJSON, &objBook)
fmt.Println(objBook.Name)
fmt.Println(objBook.Name)
Vamos executar o programa agora pra ver essa alteração no console. Para isso, digite
a seguinte alteração no console: go run main.go.
Passo 8 – Salvando em um arquivo JSON
Agora, para finalizar com chave de ouro, vamos salvar nossa struct alterada em um
novo arquivo? Vamos!
Para isso basta converter o objeto objBook para um array de bytes usando a função
json.Marshal, e depois, através da função ioutil.WriteFile, salvar em um novo
arquivo.
fmt.Println(err)}
fmt.Println(err)}
Usei o nome newBook.json para não sobrescrever o arquivo original. Sempre que
executar sua aplicação, o arquivo newBook.json será sobrescrito.
Arquivo JSON sendo criado
Extras
E fim! Sua primeira aplicação em GO está finalizada! Caso queira consultar o código,
subi um repo no GIT com a solução (com o comentário de cada linha de código).
Espero que tenha ajudado, e se tiver alguma dúvida ou sugestão, deixe nos
comentários.
Até mais!