Go:
Trabalhando com JSON
Como fazer:
Em Go, o pacote encoding/json
é o seu portal para manipulação de JSON, fornecendo mecanismos para converter estruturas de dados de Go para JSON (marshalling) e vice-versa (unmarshalling). Abaixo estão exemplos básicos para começar:
Codificação (Marshalling)
Para converter uma estrutura Go para JSON, você pode usar json.Marshal
. Considere a seguinte estrutura Go:
package main
import (
"encoding/json"
"fmt"
"log"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Languages []string `json:"languages"`
}
func main() {
user := User{1, "JohnDoe", []string{"Go", "JavaScript", "Python"}}
userJSON, err := json.Marshal(user)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(userJSON))
}
Saída:
{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}
Decodificação (Unmarshalling)
Para analisar JSON em uma estrutura de dados de Go, use json.Unmarshal
:
package main
import (
"encoding/json"
"fmt"
"log"
)
func main() {
jsonStr := `{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}`
var user User
err := json.Unmarshal([]byte(jsonStr), &user)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", user)
}
Dada a struct User
como antes, esse código analisa a string JSON em uma instância de User.
Saída:
{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}
Aprofundamento
O pacote encoding/json
em Go oferece uma API direta que abstrai grande parte da complexidade envolvida na manipulação de JSON. Introduzido no início do desenvolvimento do Go, esse pacote reflete a filosofia de simplicidade e eficiência do Go. No entanto, o uso de reflexão pelo encoding/json
para inspecionar e modificar structs em tempo de execução pode levar a desempenho menos que ótimo em cenários intensivos de CPU.
Alternativas como json-iterator/go
e ffjson
surgiram, fornecendo processamento de JSON mais rápido ao gerar código de marshalling e unmarshalling estático. No entanto, encoding/json
permanece como o pacote mais usado devido à sua simplicidade, robustez e o fato de ser parte da biblioteca padrão, garantindo compatibilidade e estabilidade através das versões do Go.
Apesar de seu desempenho relativamente mais lento, a facilidade de uso e a integração com o sistema de tipos do Go tornam encoding/json
adequado para a maioria das aplicações. Para aqueles que trabalham em contextos onde o desempenho é primordial, explorar bibliotecas externas pode ser valioso, mas para muitos, a biblioteca padrão oferece o equilíbrio certo entre velocidade, simplicidade e confiabilidade.