Pretty Print JSON в Golang: форматирование JSON для людей

Работа с данными JSON — обычная задача во многих приложениях Golang. Однако при работе с большими или сложными структурами JSON может быть сложно читать и понимать данные. Вот тут-то и пригодится красивая печать. В этой статье блога мы рассмотрим несколько способов красивой печати JSON в Golang, используя разговорный язык и предоставив примеры кода, чтобы новичкам было легче разобраться.

Метод 1: использование функции MarshalIndentиз пакета encoding/json
Функция MarshalIndentпозволяет нам маршалировать объект JSON в форматированная строка с указанным отступом. Вот пример:

package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    data := map[string]interface{}{
        "name": "John Doe",
        "age":  30,
        "city": "New York",
    }
    prettyJSON, _ := json.MarshalIndent(data, "", "    ")
    fmt.Println(string(prettyJSON))
}

Метод 2: использование функции json.Indent
Функция Indentпредоставляет еще один способ красивой печати JSON в Golang. В качестве места назначения вывода он принимает io.Writer, что позволяет нам записать отформатированный JSON в файл или любую другую реализацию io.Writer. Вот пример:

package main
import (
    "encoding/json"
    "os"
)
func main() {
    data := map[string]interface{}{
        "name": "John Doe",
        "age":  30,
        "city": "New York",
    }
    file, _ := os.Create("pretty.json")
    defer file.Close()
    json.Indent(file, prettyJSON, "", "    ")
}

Метод 3: использование сторонних пакетов
Существует несколько сторонних пакетов, которые предоставляют более продвинутые параметры красивой печати. Один из популярных пакетов — github.com/tidwall/pretty, который предлагает больше контроля над форматированием JSON. Вот как вы можете его использовать:

package main
import (
    "fmt"
    "github.com/tidwall/pretty"
)
func main() {
    data := []byte(`{"name":"John Doe","age":30,"city":"New York"}`)
    prettyJSON := pretty.Pretty(data)
    fmt.Println(string(prettyJSON))
}

В этой статье мы рассмотрели различные способы красивой печати JSON в Golang. Мы начали со встроенной функции MarshalIndentиз пакета encoding/json, которая позволяет нам указывать уровень отступа. Затем мы рассмотрели функцию json.Indent, которая обеспечивает гибкость при записи форматированного JSON в io.Writer. Наконец, мы упомянули возможность использования сторонних пакетов, таких как github.com/tidwall/pretty, для более расширенных возможностей форматирования. Используя эти методы, вы можете сделать данные JSON более читабельными и простыми в работе с Golang.