json - 如何显示字符而不是ascii?

标签 json go escaping

这是我的测试代码。只需制作一个简单的 HTTP 服务器。然后生成一个 JSON 数据,它的值是“&”。但结果是我不想要的。结果在代码块下方。

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

func testFunc(w http.ResponseWriter, r *http.Request) {
    data := make(map[string]string)
    data["key"] = "&"
    bytes, err := json.Marshal(data)
    if err != nil {
        fmt.Fprintln(w, "generator json error")
    } else {
        //print console
        fmt.Println(string(bytes))
        fmt.Println("&")
        //print broswer
        fmt.Fprintln(w, string(bytes))
        fmt.Fprintln(w, "&")
    }
}

func main() {
    http.HandleFunc("/", testFunc)
    err := http.ListenAndServe(":9090", nil)
    if err != nil {
        log.Fatal("ListenAndServe", err)
    }

}

结果: Chrome浏览器显示:

{"key":"\u0026"}
&

控制台也显示:

{"key":"\u0026"}
&

& 不在 JSON 中时,浏览器和控制台会打印 &

最佳答案

在 Go1.7 他们 have added解决此问题的新选项:

encoding/json: add Encoder.DisableHTMLEscaping This provides a way to disable the escaping of <, >, and & in JSON strings.

相关函数是

func (*Encoder) SetEscapeHTML

这应该应用于编码器

enc := json.NewEncoder(os.Stdout)
enc.SetEscapeHTML(false)

dumbbodo 修改示例:https://play.golang.org/p/HnWGJAjqPA

关于json - 如何显示字符而不是ascii?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656624/

相关文章:

xml - NServiceBus 端点是否可以使用不同的序列化程序处理和发布?

json - Golang Json Unmarshal 编码语法

html - 如何使用 GO (golang) 在 HTML 中嵌入 SQLX 结果

algorithm - 转到 : longest common subsequence to print result array

php - 如何在来自 php 的 ajax JSON 响应中的字符串中添加双引号?

java - 如何使内容类型为 : application/json in the apache httpPost method

json - 如何在 JQuery 中将 json 响应读取为名称值对

go - 如何使用命名管道处理进程输出

escaping - 在 mustache 模板变量中混合未净化的数据、HTML

c# - 当设置另有说明时,为什么 XmlReader 会检查非法字符?