Go json.Marshal 无法获取单个反斜杠
Go json.Marshal unable get single backslash
var (
username string = "ADuser\user"
password string = "PASS"
userCredentials = map[string]string{"username": username, "password": password}
)
func main() {
jsonValue, _ := json.Marshal(userCredentials)
...
}
如果我尝试打印 marshal 值,我会得到这个输出
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]
var (
username string = "ADuser\user"
password string = "PASS"
userCredentials = map[string]string{"username": username, "password": password}
)
func main() {
jsonValue, _ := json.Marshal(userCredentials)
...
}
如果我尝试打印 marshal 值,我会得到这个输出
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]