取消引用带有多个反斜杠的字符串

trn*_*rnj 1 go

我从一个来源获取以下格式的数据(带前导双引号)

data := `"{\"u\":\"Mozilla\\\/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox\\\/11.0 (via ggpht.com GoogleImageProxy)\"}"`
_, err := strconv.Unquote(data)
if err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

我需要取消引号并将其转换为 json。但由于像这里这样的尾部反斜杠Mozilla\\\/5.0会出现错误invalid syntax。

在PHP中,它是通过double json_decodelike转换的json_decode(json_decode($data, true), true)

如何在 go 中做同样的事情?正确地取消转义该字符串。

Cer*_*món 5

该字符串是双重编码的 JSON。使用 JSON 解码器删除引号:

data := `"{\"u\":\"Mozilla\\\/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox\\\/11.0 (via ggpht.com GoogleImageProxy)\"}"`
var unquoted string
err := json.Unmarshal([]byte(data), &unquoted)
if err != nil {
    // TODO: handle error
}
Run Code Online (Sandbox Code Playgroud)

再次解码以获取用户代理字符串:

var v struct{ U string }
err = json.Unmarshal([]byte(unquoted), &v)
if err != nil {
    // TODO: handle error
}
userAgent := v.U
Run Code Online (Sandbox Code Playgroud)

在操场上运行程序。