json - 编码后删除转义字符

标签 json go marshalling

在上面的代码中,我试图通过 Marshal 将我的 key 转换为字节数组。虽然我成功了,但是当我看到编码字符串时,我在我的 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}"

Go Playground 链接: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}

Go Playground 链接:https://play.golang.org/p/aoTEQtJslTs

关于json - 编码后删除转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53390353/

相关文章:

c# - 我可以在属性中指定路径以将类中的属性映射到 JSON 中的子属性吗?

struct - 允许任何类型的 slice 作为参数

http覆盖golang中的http头代码而json编码有错误

c# - 使用 DllImport 将 C# byte[] 编码到 C++ DLL

javascript - 是否可以将函数的所有参数作为该函数内的单个对象获取?

java - 如何将使用 GZIP 压缩的字符串从 Java App 发送到 PHP Web 服务

java - 将 Salesforce 报告导出为 CSV (Java)

json - 如何在部署aws时在json文件中添加gitlab用户定义的变量?

Go 库 - golang 的 async.auto

c++ - 如何使用 marshap_cppstd.h 将带有命名空间接口(interface)的 header 包含到 c++/cli 项目中