英文:
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
答案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 ?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论