封送处理片会产生字符串

时间:2015-11-24 08:24:30

标签: arrays json go marshalling

我正在尝试对一片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是一个带有此代码的游乐场。

1 个答案:

答案 0 :(得分:4)

这是因为您的号码使用uint8类型,uint8byteSpec: Numeric types)的别名。默认情况下,字节数组和切片使用Base64编码进行编码,这就是您所看到的内容("AQIDBA=="是字节[1, 2, 3, 4]的Base64编码文本)。

引自json.Marhsal() doc:

  

数组和切片值编码为JSON数组,除了[]字节编码为base64编码的字符串,而nil切片编码为空JSON对象。

例如,更改uintint的数字类型,然后您就会看到自己的期望。

例如(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>