为了账号安全,请及时绑定邮箱和手机立即绑定

编组切片导致字符串

编组切片导致字符串

Go
临摹微笑 2021-11-22 18:47:22
我正在尝试对一段uint8值进行 json 编码,但这样做会产生一个字符串。例如,这个:d := []uint8{1,2,3,4}data, err := json.Marshal(d)fmt.Println(string(data), err)结果是:"AQIDBA==" <nil>我在期待 [1,2,3,4],但我得到了这个奇怪的字符串。这是一个带有此代码的游乐场。
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

那是因为您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 {

    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>


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信