编组切片导致字符串

我正在尝试对一段uint8值进行 json 编码,但这样做会产生一个字符串。例如,这个:


d := []uint8{1,2,3,4}

data, err := json.Marshal(d)

fmt.Println(string(data), err)

结果是:


"AQIDBA==" <nil>

我在期待 [1,2,3,4],但我得到了这个奇怪的字符串。这是一个带有此代码的游乐场。


临摹微笑
浏览 137回答 1
1回答

白板的微信

那是因为您uint8对数字使用类型,并且uint8是byte( Spec: Numeric types )的别名。默认情况下,字节数组和切片使用 Base64 编码进行编码,这就是您看到的("AQIDBA=="是字节的 Base64 编码文本[1, 2, 3, 4])。引用json.Marhsal()文档:数组和切片值编码为 JSON 数组,除了 []byte 编码为 base64 编码的字符串,而 nil 切片编码为 null JSON 对象。更改号码类型,uint或int例如,然后你会看到你所期望的。例如(去游乐场):type MyStruct struct {&nbsp; &nbsp; Data []uint}d := new(MyStruct)d.Data = []uint{1, 2, 3, 4}data, err := json.Marshal(d)fmt.Println(string(data), err)输出:{"Data":[1,2,3,4]} <nil>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go