亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go - 奇怪的 json 連字符解組錯誤

Go - 奇怪的 json 連字符解組錯誤

Go
慕工程0101907 2021-09-13 16:22:49
我在使用 json 字符串時遇到了一個非常奇怪的錯誤。當我將字符串的鍵值對添加到 json 輸入時,首先引入了該問題,即"DeviceIdentifier": "device-id". 我將代碼縮減到顯示錯誤所需的最低限度。當我對該鍵值對中的數據進行幾乎任何更改時,錯誤就會消失,這對我來說似乎很奇怪。我可以使用其他鍵來規避錯誤,但似乎我在這里遺漏了一些東西。要么是這樣,要么庫函數似乎有問題......有什么想法嗎?package mainimport (    "encoding/json"    "fmt")type S struct {    Name            string    DeviceIdentifier []byte}func main() {    var s S    data := []byte(`{"Name": "test", "DeviceIdentifier": "device-id"}`)    if err := json.Unmarshal(data, &s); err != nil {        fmt.Println(err.Error())    }}去游樂場鏈接:http : //play.golang.org/p/huXuaokGikJson 包文檔:http : //golang.org/pkg/encoding/json/更新我剛剛發現當值字符串的長度可以被 4 整除時,編碼會成功,例如abcd并且abcdefgh有效,而abcde和 abcdefg` 則不然。現在我知道什么是 base64 字符串,錯誤很有意義。參考這里:維基百科:http : //en.wikipedia.org/wiki/Base64轉換工具:http : //www.string-functions.com/base64encode.aspx
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

來自json 包文檔:

數組和切片值編碼為 JSON 數組,除了 []byte 編碼為 base64 編碼的字符串,而 nil 切片編碼為 null JSON 對象。

所以如果你改變你的結構,DeviceIdentifier string它會起作用


查看完整回答
反對 回復 2021-09-13
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

只是要注意另一種可能性,為了將 struct 字段保持為 a []byte,它也可以很好地在客戶端實際執行 base64 編碼,以便通過 json 傳遞的值代表 base64 中有效的值。這是我最終在我的項目中使用的解決方案。json.Marshal()Go 中的函數會為包含字節切片的結構自動執行此操作。


查看完整回答
反對 回復 2021-09-13
  • 2 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號