为什么编码/json将切片封送为base64

  • 本文关键字:切片 base64 json 编码 go
  • 更新时间 :
  • 英文 :


我正在为restful api编写SDK。它具有非常嵌套的结构。

例如一部分数据。

type FieldUint8Options struct {
MinValue  uint8   `json:"min_value"`
MaxValue  uint8   `json:"max_value"`
Step      uint    `json:"step"`
Operation string  `json:"operation"`
ValueList []uint8 `json:"value_list"`
}
type TTLOption struct {
Value       uint8               `json:"value"`
FieldEngine []FieldUint8Options `json:"field_engine"`
}

当我封送TTLOption结构的初始化数据时,ValueList字段变成base64数据。

代码:

jsonFile, err := os.Open("example.json")
if err != nil {
fmt.Println(err)
os.Exit(0)
}

byteValue, _ := ioutil.ReadAll(jsonFile)
var ttl TTLOption
if err := json.Unmarshal(byteValue, &ttl); err != nil {
fmt.Println(err)
os.Exit(0)
}
// I also wrote Custom UnmarshalJSON() interface for TTLOption and FieldUint8Options to handle nil slices.
data, _ := json.Marshal(ttl)
fmt.Println(string(data))

输出:

'ttl': {'value': 123, 'field_engine': [{'min_value': 123, 'max_value': 222, 'step': 1, 'operation': 'random', 'value_list': 'ZA=='}]}}

正如您所看到的,value_list是base64表示。为什么它会这样?谢谢并致以最良好的问候。

正如json封送拆收器文档所说:

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

byteuint8的别名。

您可以使用uint进行封送处理,它将封送为JSON数组。

最新更新