Функция json.Indent

Функция json.Indent преобразует "сырой" JSON-массив байтов в форматированный JSON с отступами для удобочитаемости. В первый параметр передается буфер для записи результата, во второй - исходный JSON-массив, в третий - префикс (обычно пустая строка), а в четвертый - строка отступа (например, два пробела или табуляция). Функция возвращает ошибку, если исходный JSON невалидный.

Синтаксис

gojson.Indent(dst, src, prefix, indent)

Пример

Давайте отформатируем простой JSON с одним полем:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  src := []byte(`{"name":"John"}`)
  var dst bytes.Buffer

  err := json.Indent(&dst, src, "", "  ")
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(dst.String())
}

Результат выполнения кода:

go{
  "name": "John"
}

Пример

Теперь отформатируем вложенный JSON с использованием табуляции в качестве отступа:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  src := []byte(`{"name":"John","age":30,"address":{"city":"New York","zip":10001}}`)
  var dst bytes.Buffer

  err := json.Indent(&dst, src, "", "\t")
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(dst.String())
}

Результат выполнения кода:

go{
  "name": "John",
  "age": 30,
  "address": {
    "city": "New York",
    "zip": 10001
  }
}

Пример

Функция json.Indent также может использоваться с пользовательским префиксом для добавления символов перед каждой строкой:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  src := []byte(`{"name":"John","age":30}`)
  var dst bytes.Buffer

  err := json.Indent(&dst, src, ">> ", "  ")
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(dst.String())
}

Результат выполнения кода:

go>> {
>>   "name": "John",
>>   "age": 30
>> }

Пример

Если исходный JSON невалидный, функция возвращает ошибку:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  src := []byte(`{"name":"John"`)

  var dst bytes.Buffer
  err := json.Indent(&dst, src, "", "  ")

  fmt.Println(err)
}

Результат выполнения кода:

go"unexpected end of JSON input"

Пример

Функцию json.Indent можно использовать для форматирования JSON-массива:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  src := []byte(`[{"id":1,"name":"Alice"},{"id":2,"name":"Bob"}]`)
  var dst bytes.Buffer

  err := json.Indent(&dst, src, "", "  ")
  if err != nil {
    fmt.Println(err)
    return
  }

  fmt.Println(dst.String())
}

Результат выполнения кода:

go[
  {
  "id": 1,
  "name": "Alice"
  },
  {
  "id": 2,
  "name": "Bob"
  }
]

Смотрите также

  • функцию json.MarshalIndent,
    которая маршалит Go-значение и сразу форматирует JSON с отступами
  • функцию json.Compact,
    которая удаляет пробелы из JSON, делая его компактным
  • функцию json.Valid,
    которая проверяет валидность JSON-данных
  • функцию json.Marshal,
    которая преобразует Go-значение в JSON-массив байтов