编组后删除转义字符
Removing escape characters after Marshalling
在上面的代码中,我试图通过 Marshal 将我的密钥转换为字节数组。虽然我成功了,但当我看到编组字符串时,我在 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}"
我认为您在 func GetBytes(key interface{}) ([]byte, error)
中将字符串发送为 key
。这就是您看到转义字符的原因。
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}"
去游乐场link: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}
在上面的代码中,我试图通过 Marshal 将我的密钥转换为字节数组。虽然我成功了,但当我看到编组字符串时,我在 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}"
我认为您在 func GetBytes(key interface{}) ([]byte, error)
中将字符串发送为 key
。这就是您看到转义字符的原因。
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}"
去游乐场link: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}