Тип json.Encoder

Тип json.Encoder предоставляет возможность последовательного кодирования значений Go в JSON-формат с записью в поток вывода. В первый параметр функции json.NewEncoder передается объект, реализующий интерфейс io.Writer, в который будет записан результат. Основным методом типа является Encode, который принимает значение любого типа и записывает его JSON-представление в поток.

Синтаксис

goencoder := json.NewEncoder(writer)
err := encoder.Encode(v)

Пример

Давайте закодируем структуру в JSON-строку и выведем ее в буфер:

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

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

go{"Name":"Alice","Age":30}

Пример

Закодируем слайс строк в JSON-массив, используя json.Encoder:

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

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

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

Пример

Закодируем карту в JSON-объект с помощью json.Encoder:

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

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

go{"one":1,"three":3,"two":2}

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

  • функцию json.Marshal,
    которая преобразует значение в JSON-строку
  • тип json.Decoder,
    который декодирует JSON-данные из потока
  • метод json.Encoder.Encode,
    который выполняет кодирование значения
  • функцию json.Indent,
    которая добавляет отступы в JSON-строку