Когда вы JSON-кодируете []byte
, он будет отображаться как строка в кодировке base64, наиболее эффективный способ представления произвольного байтового среза / массива в JSON (единственной реальной альтернативой является "field": [7, 129, 13, 48, ...]
и т. Д. ). Однако в вашем коде вы делаете пару необычных вещей, которые могут не соответствовать тому, что задумано:
- Вы вручную создаете строку JSON-ish, используя
Sprintf
, затем пытаетесь JSON-кодировать ваш JSON. json.Marshal
для получения произвольного значения Go и его преобразования в JSON.
- Ваш JSON, созданный вручную, недействителен; у вас есть значение строкового поля без кавычек.
Вероятно, вам нужен один из следующих вариантов:
// Manually-created *valid* JSON
func JsonTest1(w http.ResponseWriter, r *http.Request) {
test1 := "something1"
test2 := 456
// %q instead of %s gives us a quoted string:
j1 := []byte(fmt.Sprintf(`
{
data: {
"test1": %q,
"test2": %d
}
}
`, test1, test2))
w.Header().Set("Content-Type", "application/json")
w.Write(j1)
}
// JSON created with json.Marshal
func JsonTest2(w http.ResponseWriter, r *http.Request) {
test1 := "something1"
test2 := 456
data := map[string]interface{}{
"data": map[string]interface{}{
"test1": test1,
"test2": test2,
},
}
j1, _ := json.Marshal(data)
w.Header().Set("Content-Type", "application/json")
w.Write(j1)
}