golang json.Unmarshal 到 struct []byte

type TTT struct {

    Info []byte

    Version int32

}

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))

}

错误:从 json 编组对象中解组 JSON 时出错:输入字节 64 处的 base64 数据非法


烙印99
浏览 277回答 2
2回答

胡子哥哥

您可能需要对十六进制数据进行编码:package mainimport (        "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)}

繁星淼淼

默认的 json 解析器将从 base64 字符串解析 []byte。如果您的源字符串不是 base64,那么您需要定义自己的封送拆收器。type TTT struct {    Info    bytes    Version int32}type bytes []bytefunc (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))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go