PureJSON
Обычно json.Marshal в Go заменяет специальные HTML-символы на Unicode-escape-последовательности для безопасности — например, < становится \u003c. Это нормально при встраивании JSON в HTML, но если вы создаёте чистое API, клиенты могут ожидать буквальные символы.
c.PureJSON использует json.Encoder с SetEscapeHTML(false), поэтому HTML-символы, такие как <, > и &, отображаются буквально, а не экранируются.
Используйте PureJSON, когда потребители вашего API ожидают необработанный, неэкранированный JSON. Используйте стандартный JSON, когда ответ может быть встроен в HTML-страницу.
package main
import ( "net/http"
"github.com/gin-gonic/gin")
func main() { router := gin.Default()
// Standard JSON -- escapes HTML characters router.GET("/json", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "html": "<b>Hello, world!</b>", }) })
// PureJSON -- serves literal characters router.GET("/purejson", func(c *gin.Context) { c.PureJSON(http.StatusOK, gin.H{ "html": "<b>Hello, world!</b>", }) })
router.Run(":8080")}Тестирование
# Standard JSON -- HTML characters are escapedcurl http://localhost:8080/json# Output: {"html":"\u003cb\u003eHello, world!\u003c/b\u003e"}
# PureJSON -- HTML characters are literalcurl http://localhost:8080/purejson# Output: {"html":"<b>Hello, world!</b>"}