PureJSON
Normalmente, o json.Marshal do Go substitui caracteres HTML especiais por sequências de escape unicode por segurança — por exemplo, < se torna \u003c. Isso é adequado quando se incorpora JSON em HTML, mas se você está construindo uma API pura, os clientes podem esperar os caracteres literais.
c.PureJSON usa json.Encoder com SetEscapeHTML(false), então caracteres HTML como <, > e & são renderizados literalmente em vez de serem escapados.
Use PureJSON quando os consumidores da sua API esperam JSON bruto e sem escape. Use o JSON padrão quando a resposta pode ser incorporada em uma página 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")}Teste
# 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>"}