Go:
Работа с JSON

Как:

В Go пакет encoding/json является вашими воротами к манипуляциям с JSON, предоставляя механизмы для преобразования структур данных Go в JSON (маршалинг) и обратно (демаршалинг). Ниже приведены базовые примеры для начала работы:

Кодирование (Маршалинг)

Для преобразования структуры Go в JSON можно использовать json.Marshal. Рассмотрим следующую структуру 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))
}

Вывод:

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

Декодирование (Демаршалинг)

Для разбора JSON в структуру данных Go используйте 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)
}

Используя структуру User, как и раньше, этот код анализирует строку JSON в экземпляр User.

Вывод:

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

Погружение

Пакет encoding/json в Go предлагает простой API, который абстрагирует большую часть сложности, связанной с манипуляциями с JSON. Введённый на раннем этапе разработки Go, этот пакет отражает философию Go в плане простоты и эффективности. Однако использование рефлексии encoding/json для осмотра и изменения структур во время выполнения может привести к снижению производительности в сценариях, требующих интенсивной работы процессора.

Появились альтернативы, такие как json-iterator/go и ffjson, предлагающие более быструю обработку JSON за счет генерации статического кода маршалинга и демаршалинга. Однако encoding/json остается наиболее часто используемым пакетом из-за его простоты, надежности и того факта, что он является частью стандартной библиотеки, что обеспечивает совместимость и стабильность между версиями Go.

Несмотря на относительно медленную производительность, легкость использования и интеграция с системой типов Go делают encoding/json подходящим для большинства приложений. Для тех, кто работает в контексте, где производительность имеет первостепенное значение, изучение внешних библиотек может быть оправданным, но для многих стандартная библиотека находит правильный баланс между скоростью, простотой и надежностью.