2 回答
TA贡献1825条经验 获得超6个赞
您可能需要对十六进制数据进行编码:
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
)
type TTT struct {
Info []byte
Version int32
}
func main() {
b64Content := base64.StdEncoding.EncodeToString([]byte("0x97e302078c11ca8e7d75e2eedd1091eafec353864212085406d8d7dca0e3fa4a"))
info := fmt.Sprintf(`{"info":"%s","version":20}`, b64Content)
test := TTT{}
err := json.Unmarshal([]byte(info), &test)
if err != nil {
fmt.Println("Error in JSON unmarshalling from json marshalled object:", err)
return
}
fmt.Printf("%s", test.Info)
}
TA贡献1775条经验 获得超11个赞
默认的 json 解析器将从 base64 字符串解析 []byte。
如果您的源字符串不是 base64,那么您需要定义自己的封送拆收器。
type TTT struct {
Info bytes
Version int32
}
type bytes []byte
func (b *bytes) MarshalJSON() ([]byte, error) {
str := string(input)
bs, err :=hex.DecodeString(str[3:len(str)-1])
if err!=nil{
return err
}
*b = bs
return nil
}
func (b *bytes) UnmarshalJSON(input []byte) error {
*b = bytes(input)
return nil
}
func main() {
info := `{"info":"0x97e302078c11ca8e7d75e2eedd1091eafec353864212085406d8d7dca0e3fa4a","version":20}`
test := TTT{}
err := json.Unmarshal([]byte(info), &test)
if err != nil {
fmt.Println("Error in JSON unmarshalling from json marshalled object:", err)
return
}
fmt.Println((test))
}
- 2 回答
- 0 关注
- 272 浏览
添加回答
举报