关于Rest:如何在Golang的RESTful api中返回不带转义字符串的Json数据

How to return Json data without escape string in RESTful api on Golang

我已经用Golang编写了一个API。此API确实从其他服务接收数据,然后以JSON字符串类型响应用户。这是我遇到的问题。

1
2
3
4
5
6
7
8
9
type message struct {
    Data string `json:"data"`
}

func test(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type","application/json")
    data := // Retrieve message that contain backslash
    json.NewEncoder(w).Encode(message{Data: data})
}

`
从其他API接收的数据中是否存在反斜杠。此API将使用双反斜杠发送响应。

示例。

接收到的数据:
"asdasdasd\\asdasdasd"

响应数据:
{"data":"asdasdasd\\\\asdasdasd"}

我已经设法弄清楚了。这是我得到的。如果我尝试使用fmt.Println()在屏幕上打印出来,那么所有这些都很好。

当我尝试发送那些放在JSON字符串中的内容时,我只会遇到问题。因此,有什么方法可以发送没有双反斜杠的数据吗?


几天前我问了几乎相同的问题,这是帖子。

基本上,您不希望数据是string,而是interface{}

1
2
3
type message struct {
    Data interface{} `json:"data"`
}

我认为这也可能适用于您。而且,如果您要使用RESTFul并返回不同类型的结构,则绝对是可行的方法。


您可以创建一个自定义方法,并用单个反斜杠替换两个反斜杠。
诸如此类:

1
2
3
4
5
6
7
8
func JSONMarshal(v interface{}, backslashEscape bool) ([]byte, error) {
    b, err := json.Marshal(v)

    if backslashEscape {
        b = bytes.Replace(b, []byte(`\\\\`), []byte(`\\`), -1)
    }
    return b, err
}

json/encoder软件包也具有DisableHTMLEscaping,如果设置为true,默认为false,则可以转义HTML字符。