Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpHsJr 246 of 280 menu
◀ ▶

Ответ в формате JSON в Go

Ответ можно собрать структурой и отдать с нужным заголовком типа. Клиент тогда видит текст в формате JSON и может разобрать его тем же пакетом, что уже проходили для байт в памяти.

Перед записью тела ставят заголовок Content-Type со значением application/json. Кодировщик из пакета JSON пишет прямо в объект ответа и возвращает ошибку сборки.

Вернем пользователя с именем и возрастом:

package main import ( "encoding/json" "log" "net/http" ) type User struct { Name string `json:"name"` Age int `json:"age"` } func main() { mux := http.NewServeMux() mux.HandleFunc("GET /user", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") u := User{Name: "ann", Age: 20} if err := json.NewEncoder(w).Encode(&u); err != nil { http.Error(w, "encode", http.StatusInternalServerError) return } }) if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil { log.Fatal(err) } }

В теле ответа текст с ключами name и age. Кодировщик добавляет перевод строки в конце, это нормально для учебного вывода.

Карту с строковыми ключами отдают так же, если не хотят заводить тип:

package main import ( "encoding/json" "log" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("GET /status", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") m := map[string]string{"state": "ok"} if err := json.NewEncoder(w).Encode(m); err != nil { http.Error(w, "encode", http.StatusInternalServerError) return } }) if err := http.ListenAndServe("127.0.0.1:8080", mux); err != nil { log.Fatal(err) } }

Дана структура:

type Point struct { X int `json:"x"` Y int `json:"y"` }

Напишите полный main.go с маршрутом просмотра /point, который отдает JSON для точки 3 и 4 с заголовком типа JSON.

Дан следующий код:

w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(struct{ Ok bool }{Ok: true})

Скажите, какой заголовок увидит клиент и какой ключ будет в теле ответа.

Дан обработчик, который сначала вызывает кодировщик JSON, а затем ставит заголовок типа. Скажите, успеет ли клиент увидеть правильный тип содержимого.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить