默认情况下,字节字节片被编组为Base64字符串,字节数组按原样转换:
func main() {
type Foo struct {
ByteSlice []byte
ByteArray [6]byte
}
foo := Foo {
ByteSlice: []byte{0, 0, 0, 1, 2, 3},
ByteArray: [6]byte{0, 0, 0, 1, 2, 3},
}
text, _ := json.Marshal(foo)
fmt.Printf("%s", text)
}
输出:
{"ByteSlice":"AAAAAQID","ByteArray":[0,0,0,1,2,3]}
有没有一种方法可以对字节片使用十六进制字符串转换?
答案 0 :(得分:2)
如果定义自定义类型,则可以自定义JSON序列化。我以[]byte
代替:
输出:
{"ByteSlice":"000000010203","ByteArray":[0,0,0,1,2,3]}
代码:
package main
import (
"encoding/hex"
"encoding/json"
"fmt"
)
type MyByteSlice []byte
func (m MyByteSlice) MarshalJSON() ([]byte, error) {
return json.Marshal(hex.EncodeToString(m))
}
func main() {
type Foo struct {
ByteSlice MyByteSlice
ByteArray [6]byte
}
foo := Foo {
ByteSlice: []byte{0, 0, 0, 1, 2, 3},
ByteArray: [6]byte{0, 0, 0, 1, 2, 3},
}
text, _ := json.Marshal(foo)
fmt.Printf("%s\n", text)
}
答案 1 :(得分:0)
有没有一种方法可以对字节片使用十六进制字符串转换?
不,没有。
您必须自己编码。要么进入带有字符串字段的新结构,要么通过编写自己的UnmarshalJSON方法(如程序包json的文档中所述)。