我正在尝试对一片uint8
值进行json编码,但这样做会产生一个字符串。例如,这个:
d := []uint8{1,2,3,4}
data, err := json.Marshal(d)
fmt.Println(string(data), err)
结果:
"AQIDBA==" <nil>
我期待[1,2,3,4]
,但我得到了这个奇怪的字符串。 Here是一个带有此代码的游乐场。
答案 0 :(得分:4)
这是因为您的号码使用uint8
类型,uint8
是byte
(Spec: Numeric types)的别名。默认情况下,字节数组和切片使用Base64编码进行编码,这就是您所看到的内容("AQIDBA=="
是字节[1, 2, 3, 4]
的Base64编码文本)。
引自json.Marhsal()
doc:
数组和切片值编码为JSON数组,除了[]字节编码为base64编码的字符串,而nil切片编码为空JSON对象。
例如,更改uint
或int
的数字类型,然后您就会看到自己的期望。
例如(Go Playground):
type MyStruct struct {
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>