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

huangapple go评论91阅读模式
英文:

Unquote string with multiple backslashes

问题

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

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)
}

我需要取消引用并将其转换为 JSON。
但是由于像这样的尾随反斜杠 Mozilla\\\/5.0 导致出现 invalid syntax 错误。

在 PHP 中,可以通过双重 json_decode 进行转换,如 json_decode(json_decode($data, true), true)

如何在 Go 中完成相同的操作?正确地取消转义这个字符串。

英文:

From one source I get data in the following format (with leading double quote)

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)
}

I need to unquote and convert it to json.
But due to trailing backslashes like here Mozilla\\\/5.0 get error invalid syntax.

In PHP, it is converted via double json_decode like json_decode(json_decode($data, true), true)

How to do the same in go? Unescape this string properly.

答案1

得分: 4

字符串是双重编码的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: 处理错误
}

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

var v struct{ U string }
err = json.Unmarshal([]byte(unquoted), &v)
if err != nil {
    // TODO: 处理错误
}
userAgent := v.U

在Playground上运行程序:点击这里

英文:

The string is double encoded JSON. Use the JSON decoder to remove the quotes:

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
}

Decode a second time to get the user agent string:

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

Run the program on the playground.

答案2

得分: 0

你可以使用strings.Trim()函数来去除\"字符,然后再使用json.Marshal将字符串转换为JSON格式。

英文:

can't you just use strings.Trim() and this way remove \ and " chars ? Then you would have to json.Marshall string ?

huangapple
  • 本文由 发表于 2021年11月24日 23:03:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/70098390.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定