Функция json.Indent
Функция json.Indent преобразует "сырой" JSON-массив байтов в форматированный JSON с отступами для удобочитаемости. В первый параметр передается буфер для записи результата, во второй - исходный JSON-массив, в третий - префикс (обычно пустая строка), а в четвертый - строка отступа (например, два пробела или табуляция). Функция возвращает ошибку, если исходный JSON невалидный.
Синтаксис
json.Indent(dst, src, prefix, indent)
Пример
Давайте отформатируем простой JSON с одним полем:
package 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())
}
Результат выполнения кода:
{
"name": "John"
}
Пример
Теперь отформатируем вложенный JSON с использованием табуляции в качестве отступа:
package 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())
}
Результат выполнения кода:
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"zip": 10001
}
}
Пример
Функция json.Indent также может использоваться с пользовательским префиксом для добавления символов перед каждой строкой:
package 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())
}
Результат выполнения кода:
>> {
>> "name": "John",
>> "age": 30
>> }
Пример
Если исходный JSON невалидный, функция возвращает ошибку:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
src := []byte(`{"name":"John"`)
var dst bytes.Buffer
err := json.Indent(&dst, src, "", " ")
fmt.Println(err)
}
Результат выполнения кода:
"unexpected end of JSON input"
Пример
Функцию json.Indent можно использовать для форматирования JSON-массива:
package 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())
}
Результат выполнения кода:
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
Смотрите также
-
функцию
json.MarshalIndent,
которая маршалит Go-значение и сразу форматирует JSON с отступами -
функцию
json.Compact,
которая удаляет пробелы из JSON, делая его компактным -
функцию
json.Valid,
которая проверяет валидность JSON-данных -
функцию
json.Marshal,
которая преобразует Go-значение в JSON-массив байтов