Go:
Trabajando con JSON

Cómo hacerlo:

En Go, el paquete encoding/json es tu puerta de entrada a la manipulación de JSON, proporcionando mecanismos para convertir estructuras de datos de Go a JSON (marshalling) y viceversa (unmarshalling). A continuación se presentan ejemplos básicos para comenzar:

Codificación (Marshalling)

Para convertir una estructura de Go a JSON, puedes usar json.Marshal. Considere la siguiente estructura de 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))
}

Salida:

{"id":1,"username":"JohnDoe","languages":["Go","JavaScript","Python"]}

Decodificación (Unmarshalling)

Para analizar JSON en una estructura de datos de Go, usa 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 la estructura User como antes, este código analiza la cadena JSON en una instancia de Usuario.

Salida:

{ID:1 Username:JohnDoe Languages:[Go JavaScript Python]}

Profundización

El paquete encoding/json en Go ofrece una API sencilla que abstrae gran parte de la complejidad involucrada en la manipulación de JSON. Introducido al inicio del desarrollo de Go, este paquete refleja la filosofía de Go de simplicidad y eficiencia. Sin embargo, el uso de la reflexión por encoding/json para inspeccionar y modificar estructuras en tiempo de ejecución puede llevar a un rendimiento menos óptimo en escenarios intensivos en CPU.

Han surgido alternativas como json-iterator/go y ffjson, proporcionando un procesamiento de JSON más rápido mediante la generación de código de marshalling y unmarshalling estático. No obstante, encoding/json sigue siendo el paquete más utilizado debido a su simplicidad, robustez y el hecho de que es parte de la biblioteca estándar, asegurando compatibilidad y estabilidad a través de las versiones de Go.

A pesar de su rendimiento relativamente más lento, la facilidad de uso y la integración con el sistema de tipos de Go hacen que encoding/json sea adecuado para la mayoría de las aplicaciones. Para aquellos que trabajan en contextos donde el rendimiento es primordial, explorar bibliotecas externas puede ser valioso, pero para muchos, la biblioteca estándar encuentra el equilibrio correcto entre velocidad, simplicidad y fiabilidad.