登录
首页 >  Golang >  Go问答

无法在 Go json.Marshal 中转义一个反斜杠

来源:stackoverflow

时间:2024-02-27 16:18:25 415浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《无法在 Go json.Marshal 中转义一个反斜杠》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

var (
    username        string = "aduser\\user"
    password         string = "pass"
    usercredentials        = map[string]string{"username": username, "password": password}
)

func main() {
   jsonvalue, _ := json.marshal(usercredentials)
   ...
}

如果我尝试打印元帅值,我会得到这个输出

fmt.println(string(jsonvalue))
   output:
      {"password":"pass","username":"aduser\\user"}

但是如果我尝试仅打印用户名,我会得到此输出

fmt.println(username)
    output:
      aduser\user

我需要这个输出:

fmt.Println(string(jsonValue))
   Output:
      {"password":"PASS","username":"ADuser\user"}

我尝试使用 ascii 代码,但得到相同的输出。有一些想法如何解决这个问题吗?


解决方案


一切都是它应该的样子。反斜杠是 json 中的特殊字符,如果字符串应该包含反斜杠,则在 json 表示中必须将其转义,即加倍。

您的用户名在 json 文本中的值为 aduser\user,但在 json 中它必须用双反斜杠表示。

如果你解码它,你就会看到它:

var decoded map[string]string
if err := json.unmarshal(jsonvalue, &decoded); err != nil {
    panic(err)
}

fmt.println(decoded)

这将输出(在 Go Playground 上尝试):

map[password:PASS username:ADuser\user]

到这里,我们也就讲完了《无法在 Go json.Marshal 中转义一个反斜杠》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>