Метод json.Encoder.Encode
Метод json.Encoder.Encode преобразует переданное значение в JSON-формат
и записывает результат в поток вывода, связанный с экземпляром Encoder.
В качестве параметра метод принимает произвольное значение any,
которое необходимо закодировать. Возвращает метод ошибку типа error,
если в процессе кодирования или записи произошла ошибка.
В отличие от json.Marshal, метод записывает данные напрямую в поток,
что удобно при работе с большими объемами данных.
Синтаксис
err := encoder.Encode(v)
Пример
Давайте создадим структуру пользователя и закодируем ее в JSON
с помощью json.Encoder.Encode:
package main
import (
"encoding/json"
"fmt"
"os"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
IsActive bool `json:"is_active"`
}
func main() {
user := User{
ID: 1,
Name: "Alice",
IsActive: true,
}
encoder := json.NewEncoder(os.Stdout)
err := encoder.Encode(user)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
{"id":1,"name":"Alice","is_active":true}
Пример
Теперь давайте закодируем карту с несколькими значениями в JSON:
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
data := map[string]int{
"a": 1,
"b": 2,
"c": 3,
}
encoder := json.NewEncoder(os.Stdout)
err := encoder.Encode(data)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
{"a":1,"b":2,"c":3}
Пример
Давайте рассмотрим пример кодирования слайса строк в JSON:
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
slice := []string{"a", "b", "c", "d", "e"}
encoder := json.NewEncoder(os.Stdout)
err := encoder.Encode(slice)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
["a","b","c","d","e"]
Пример
Рассмотрим пример кодирования данных в файл с помощью json.Encoder.Encode:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Product struct {
Name string `json:"name"`
Price float64 `json:"price"`
}
func main() {
products := []Product{
{Name: "Laptop", Price: 999.99},
{Name: "Mouse", Price: 25.50},
}
file, err := os.Create("products.json")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
encoder := json.NewEncoder(file)
err = encoder.Encode(products)
if err != nil {
fmt.Println(err)
}
}
Результат выполнения кода:
[{"name":"Laptop","price":999.99},{"name":"Mouse","price":25.5}]
Смотрите также
-
функцию
json.Marshal,
которая возвращает закодированное значение как байтовый срез -
функцию
json.MarshalIndent,
которая форматирует JSON с отступами для улучшения читаемости -
метод
json.Encoder,
который представляет объект для записи JSON-данных в поток -
метод
json.NewEncoder,
который создает новый экземплярEncoderдля заданного потока