douluozhan4370 2018-11-20 09:54
浏览 45
已采纳

编组后删除转义符

In the above code I am trying to convert my key to byte array via Marshal. Although I am successful doing it, when I see the Marshalled string, I am seeing \ escape character before my json keys. Can you please help me remove that?

 func GetBytes(key interface{}) ([]byte, error) {

    b, err := json.Marshal(key)
    if err != nil {
            return nil, err
    }

    log.Println("%%%%%%%%%%")
    log.Printf("%+v
", key)
    log.Println("##########")
    log.Println(string(b));

    return b, nil
}

Current Output:

%%%%%%%%%%
{"entityId":5010740929,"eventTime":1542706233458}
##########
"{\"entityId\":5010740929,\"eventTime\":1542706233458}"
  • 写回答

1条回答 默认 最新

  • douningchang3610 2018-11-20 10:08
    关注

    I think you sending string as key in func GetBytes(key interface{}) ([]byte, error). That's why you are seeing escape characters.

    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))
    }
    

    Output:

    {"A":1,"B":2}
    "{\"A\":1,\"B\":2}"
    

    Go playground link: https://play.golang.org/p/iF1ckvZ9cQC

    In that case, You can use Unquote to remove quote and escape character:

    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))
    }
    

    Output:

    "{\"A\":1,\"B\":2}"
    {"A":1,"B":2}
    

    Go playground link: https://play.golang.org/p/aoTEQtJslTs

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵