Go如何处理多反斜杠转义字符串 解决strconv.Unquote语法报错问题
Go处理双重转义JSON字符串方案
问题原因
你直接调用strconv.Unquote报错的核心原因是:该方法遵循Go语言字符串字面量的转义规则,而你拿到的数据源是JSON转义格式的,两者转义规则不兼容,遇到\/这类JSON特有的转义序列就会触发invalid syntax错误。
你手头的数据本质是两次JSON序列化的产物:先把包含UA的结构序列化为JSON字符串,再把这个字符串作为值做了第二次JSON序列化,因此外层多了一层引号,内部转义符也多了一层转义,和PHP中两次json_decode的处理逻辑对应,Go同样可以通过两次json.Unmarshal完成解析。
可运行实现代码
package main import ( "encoding/json" "fmt" ) func main() { // rawStr 为你从数据源拿到的原始字符串,此处示例值为Go字面量写法 rawStr := "\"{\\\"u\\\":\\\"Mozilla\\\\/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox\\\\/11.0 (via ggpht.com GoogleImageProxy)\\\"}\"" // 第一次反序列化:剥离外层引号,处理第一层转义,得到标准JSON字符串 var innerJSON string if err := json.Unmarshal([]byte(rawStr), &innerJSON); err != nil { panic(err) } // 第二次反序列化:将标准JSON字符串解析为目标结构,这里用map演示,也可替换为自定义结构体 var res map[string]string if err := json.Unmarshal([]byte(innerJSON), &res); err != nil { panic(err) } fmt.Println("解析得到的UA:", res["u"]) }
运行输出
解析得到的UA: Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)
内容的提问来源于stack exchange,提问作者user5234194
相关产品推荐
相关产品推荐

