Тип json.Encoder
Тип json.Encoder предоставляет возможность последовательного
кодирования значений Go в JSON-формат с записью в поток вывода.
В первый параметр функции json.NewEncoder передается
объект, реализующий интерфейс io.Writer, в который
будет записан результат. Основным методом типа является
Encode, который принимает значение любого типа и
записывает его JSON-представление в поток.
Синтаксис
encoder := json.NewEncoder(writer)
err := encoder.Encode(v)
Пример
Давайте закодируем структуру в JSON-строку и выведем ее в буфер:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
type User struct {
Name string
Age int
}
func main() {
user := User{Name: "Alice", Age: 30}
buf := new(bytes.Buffer)
encoder := json.NewEncoder(buf)
err := encoder.Encode(user)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
{"Name":"Alice","Age":30}
Пример
Закодируем слайс строк в JSON-массив, используя
json.Encoder:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
data := []string{"a", "b", "c", "d", "e"}
buf := new(bytes.Buffer)
encoder := json.NewEncoder(buf)
err := encoder.Encode(data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
["a","b","c","d","e"]
Пример
Закодируем карту в JSON-объект с помощью
json.Encoder:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
data := map[string]int{"one": 1, "two": 2, "three": 3}
buf := new(bytes.Buffer)
encoder := json.NewEncoder(buf)
err := encoder.Encode(data)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(buf.String())
}
Результат выполнения кода:
{"one":1,"three":3,"two":2}
Смотрите также
-
функцию
json.Marshal,
которая преобразует значение в JSON-строку -
тип
json.Decoder,
который декодирует JSON-данные из потока -
метод
json.Encoder.Encode,
который выполняет кодирование значения -
функцию
json.Indent,
которая добавляет отступы в JSON-строку