Функция json.NewDecoder

Функция json.NewDecoder создает новый декодер, который читает JSON-данные из указанного потока ввода. В качестве параметра она принимает объект, реализующий интерфейс io.Reader, и возвращает указатель на json.Decoder. Этот декодер позволяет последовательно читать JSON-значения из потока, что особенно полезно при работе с большими объемами данных или потоковыми источниками.

Синтаксис

gojson.NewDecoder(reader io.Reader) *json.Decoder

Пример

Давайте декодируем JSON-строку в структуру с помощью json.NewDecoder:

gopackage main

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

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

func main() {
  jsonData := `{"name":"Alice","age":30}`
  reader := strings.NewReader(jsonData)
  decoder := json.NewDecoder(reader)

  var user User
  err := decoder.Decode(&user)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(user)
}

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

go{Alice 30}

Пример

Давайте декодируем JSON-строку в карту (map) с помощью json.NewDecoder:

gopackage main

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

func main() {
  jsonData := `{"name":"Alice","age":30,"active":true}`
  reader := strings.NewReader(jsonData)
  decoder := json.NewDecoder(reader)

  var data map[string]interface{}
  err := decoder.Decode(&data)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(data)
}

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

gomap[active:true age:30 name:Alice]

Пример

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

gopackage main

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

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

func main() {
  jsonData := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
  reader := strings.NewReader(jsonData)
  decoder := json.NewDecoder(reader)

  var users []User
  err := decoder.Decode(&users)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(users)
}

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

go[{Alice 30} {Bob 25}]

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

  • функцию json.NewEncoder,
    которая создает новый кодер для записи JSON в поток вывода
  • функцию json.Decoder.Decode,
    которая считывает следующее JSON-значение из потока
  • функцию json.Unmarshal,
    которая декодирует JSON в структуру из строки
  • функцию json.Decoder.Token,
    которая считывает отдельные токены JSON для потоковой обработки