Функция json.MarshalIndent
Функция json.MarshalIndent преобразует переданное значение
в JSON-строку с отступами и префиксами, делая вывод удобным
для чтения человеком. В первый параметр передается значение,
которое нужно сериализовать. Во второй параметр передается
префикс (строка, добавляемая перед каждой строкой вывода).
В третий параметр передается строка отступа (обычно пробелы
или табуляция для вложенных структур). Функция возвращает
байтовый срез и ошибку, если сериализация невозможна.
Синтаксис
json.MarshalIndent(v any, prefix, indent string) ([]byte, error)
Пример с простой структурой
Давайте сериализуем структуру с отступом в 2 пробела:
package main
import (
"encoding/json"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
u := User{Name: "Alice", Age: 30}
res, err := json.MarshalIndent(u, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
{
"Name": "Alice",
"Age": 30
}
Пример с картой (map)
Сериализуем карту с отступом в виде табуляции:
package main
import (
"encoding/json"
"fmt"
)
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
res, err := json.MarshalIndent(m, "", "\t")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
{
"a": 1,
"b": 2,
"c": 3
}
Пример с префиксом
Добавим префикс ">>" перед каждой строкой вывода:
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := []string{"a", "b", "c", "d", "e"}
res, err := json.MarshalIndent(data, ">>", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
>>[
>> "a",
>> "b",
>> "c",
>> "d",
>> "e"
>>]
Пример с вложенными структурами
Сериализуем вложенную структуру для наглядной демонстрации отступов:
package main
import (
"encoding/json"
"fmt"
)
type Address struct {
City string
Zip int
}
type Person struct {
Name string
Age int
Address Address
}
func main() {
p := Person{
Name: "Bob",
Age: 25,
Address: Address{
City: "NY",
Zip: 10001,
},
}
res, err := json.MarshalIndent(p, "", " ")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(res))
}
Результат выполнения кода:
{
"Name": "Bob",
"Age": 25,
"Address": {
"City": "NY",
"Zip": 10001
}
}
Смотрите также
-
функцию
json.Marshal,
которая выполняет сериализацию без форматирования -
функцию
json.Unmarshal,
которая десериализует JSON в структуру или карту -
функцию
json.Indent,
которая добавляет отступы к существующему JSON -
функцию
json.Valid,
которая проверяет корректность JSON