在上面的代码中,我试图通过元帅将我的密钥转换为字节数组。尽管我这样做很成功,但是当我看到Marshalled字符串时,我看到json键之前的\
转义字符。
您能帮我删除它吗?
func GetBytes(key interface{}) ([]byte, error) {
b, err := json.Marshal(key)
if err != nil {
return nil, err
}
log.Println("%%%%%%%%%%")
log.Printf("%+v\n", key)
log.Println("##########")
log.Println(string(b));
return b, nil
}
当前输出:
%%%%%%%%%%
{"entityId":5010740929,"eventTime":1542706233458}
##########
"{\"entityId\":5010740929,\"eventTime\":1542706233458}"
答案 0 :(得分:3)
我认为您在key
中以func GetBytes(key interface{}) ([]byte, error)
的形式发送字符串。这就是为什么您看到转义字符。
package main
import (
"encoding/json"
"fmt"
"log"
)
func f(key interface{}) {
json, err := json.Marshal(key)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(json))
}
func main() {
data := map[string]interface{}{
"A": 1,
"B": 2,
}
f(data)
json, err := json.Marshal(data)
if err != nil {
log.Fatal(err)
}
f(string(json))
}
输出:
{"A":1,"B":2}
"{\"A\":1,\"B\":2}"
去游乐场链接:https://play.golang.org/p/iF1ckvZ9cQC
在这种情况下,您可以使用Unquote
删除引号和转义字符:
package main
import (
"encoding/json"
"fmt"
"log"
"strconv"
)
func f(key interface{}) {
json, err := json.Marshal(key)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(json))
st, err := strconv.Unquote(string(json))
fmt.Println(st)
}
func main() {
data := map[string]interface{}{
"A": 1,
"B": 2,
}
json, err := json.Marshal(data)
if err != nil {
log.Fatal(err)
}
f(string(json))
}
输出:
"{\"A\":1,\"B\":2}"
{"A":1,"B":2}