Метод json.Encoder.Encode

Метод json.Encoder.Encode преобразует переданное значение в JSON-формат и записывает результат в поток вывода, связанный с экземпляром Encoder. В качестве параметра метод принимает произвольное значение any, которое необходимо закодировать. Возвращает метод ошибку типа error, если в процессе кодирования или записи произошла ошибка. В отличие от json.Marshal, метод записывает данные напрямую в поток, что удобно при работе с большими объемами данных.

Синтаксис

goerr := encoder.Encode(v)

Пример

Давайте создадим структуру пользователя и закодируем ее в JSON с помощью json.Encoder.Encode:

gopackage 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)
  }
}

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

go{"id":1,"name":"Alice","is_active":true}

Пример

Теперь давайте закодируем карту с несколькими значениями в JSON:

gopackage 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)
  }
}

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

go{"a":1,"b":2,"c":3}

Пример

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

gopackage 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)
  }
}

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

go["a","b","c","d","e"]

Пример

Рассмотрим пример кодирования данных в файл с помощью json.Encoder.Encode:

gopackage 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)
  }
}

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

go[{"name":"Laptop","price":999.99},{"name":"Mouse","price":25.5}]

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

  • функцию json.Marshal,
    которая возвращает закодированное значение как байтовый срез
  • функцию json.MarshalIndent,
    которая форматирует JSON с отступами для улучшения читаемости
  • метод json.Encoder,
    который представляет объект для записи JSON-данных в поток
  • метод json.NewEncoder,
    который создает новый экземпляр Encoder для заданного потока