Выход из JSON в http.ResponseWriter с шаблоном - PullRequest
0 голосов
/ 06 марта 2019

У меня есть этот шаблон:

var ListTemplate = `
{
    "resources": [
        {{ StringsJoin . ", " }}
    ]
  }
`

отображается с:

JoinFunc := template.FuncMap{"StringsJoin": strings.Join}
tmpl := template.Must(template.New("").Funcs(JoinFunc).Parse(ListTemplate))

, если я отправлю его на http.ResponseWriter, выходной текст будет экранирован.

var list []string
tmpl.Execute(w, list)

как я могу написать JSON таким образом?

1 Ответ

4 голосов
/ 06 марта 2019

Вы не должны использовать движок шаблонов Go (ни text/template, ни html/template) для генерации вывода JSON, так как движок шаблонов не знает синтаксиса и правил JSON(выход).

Вместо этого используйте пакет encoding/json для генерации JSON.Вы можете использовать json.Encoder для записи / потоковой передачи ответа непосредственно в io.Writer, например http.ResponseWriter.

Пример:

type Output struct {
    Resources []string `json:"resources"`
}

obj := Output{
    Resources: []string{"r1", "r2"},
}

enc := json.NewEncoder(w)

if err := enc.Encode(obj); err != nil {
    // Handle error
    fmt.Println(err)
}

Выходы (попробуйте на Go Playground ):

{"resources":["r1","r2"]}
...