Функция json.NewEncoder

Функция json.NewEncoder создает новый экземпляр кодировщика JSON, который записывает закодированные данные в указанный поток вывода. В первый и единственный параметр функция принимает объект, реализующий интерфейс io.Writer (например, os.Stdout или bytes.Buffer). Возвращаемое значение предоставляет метод Encode для непосредственной сериализации данных в формат JSON.

Синтаксис

gojson.NewEncoder(w io.Writer) *json.Encoder

Пример

Давайте закодируем простую структуру в JSON и выведем результат в стандартный вывод:

gopackage main

import (
  "encoding/json"
  "fmt"
  "os"
)

type Person struct {
  Name string `json:"name"`
  Age  int  `json:"age"`
}

func main() {
  p := Person{Name: "John", Age: 30}
  enc := json.NewEncoder(os.Stdout)
  err := enc.Encode(p)
  if err != nil {
    fmt.Println("Error:", err)
  }
}

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

go{"name":"John","age":30}

Пример

Давайте закодируем данные в строку с помощью буфера:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

type User struct {
  ID  int  `json:"id"`
  Email string `json:"email"`
}

func main() {
  u := User{ID: 1, Email: "user@example.com"}
  buf := new(bytes.Buffer)
  enc := json.NewEncoder(buf)
  enc.Encode(u)

  res := buf.String()
  fmt.Println(res)
}

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

go{"id":1,"email":"user@example.com"}

Пример

Давайте закодируем слайс строк в JSON и сохраним в буфере:

gopackage main

import (
  "bytes"
  "encoding/json"
  "fmt"
)

func main() {
  data := []string{"a", "b", "c", "d", "e"}
  buf := new(bytes.Buffer)
  enc := json.NewEncoder(buf)
  enc.Encode(data)

  res := buf.String()
  fmt.Println(res)
}

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

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

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

  • функцию json.NewDecoder,
    которая создает декодер JSON для чтения данных
  • функцию json.Marshal,
    которая сериализует данные в JSON и возвращает байтовый срез
  • функцию json.Unmarshal,
    которая десериализует данные из JSON в структуру Go
  • функцию json.MarshalIndent,
    которая сериализует JSON с отступами для удобочитаемости