gpt4 book ai didi

arrays - 编码 slice 结果为字符串

转载 作者:IT王子 更新时间:2023-10-29 01:02:29 26 4
gpt4 key购买 nike

我正在尝试对一片 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是一个带有这段代码的 Playground 。

最佳答案

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

引自json.Marhsal()文档:

Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string, and a nil slice encodes as the null JSON object.

例如,将您的数字类型更改为 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>

关于arrays - 编码 slice 结果为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33888625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com