我正在为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值。
byte
是uint8
的别名。
您可以使用uint
进行封送处理,它将封送为JSON数组。