golang json.Unmarshal到struct[]字节
错误:从JSON封送对象进行JSON解组时出错:输入字节64处的base64数据非法您可能需要对十六进制数据进行编码:golang json.Unmarshal到struct[]字节,go,Go,错误:从JSON封送对象进行JSON解组时出错:输入字节64处的base64数据非法您可能需要对十六进制数据进行编码: type TTT struct { Info []byte Version int32 } func main(){ info:=`{"info":"0x97e302078c11ca8e7d75e2eedd1091eafec353864212085406d8d7dca0e3fa4a","version":20}` test:=TTT{}
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解析器将解析base64字符串中的[]字节 如果源字符串不是base64,则需要定义自己的封送拆收器
类型TTT结构{
信息字节
int32版本
}
类型bytes[]字节
func(b*字节)MarshalJSON()([]字节,错误){
str:=字符串(输入)
bs,err:=hex.DecodeString(str[3:len(str)-1])
如果错误!=零{
返回错误
}
*b=bs
归零
}
func(b*字节)解组JSON(输入[]字节)错误{
*b=字节(输入)
归零
}
func main(){
信息:=`{“信息”:“0x97e302078c11ca8e7d75e2eedd1091eafec353864212085406d8d7dca0e3fa4a”,“版本:20}`
测试:=TTT{}
err:=json.Unmarshal([]字节(信息),&test)
如果错误!=零{
Println(“JSON解组JSON封送对象时出错:”,err)
返回
}
fmt.Println((测试))
}
encoding/json通过将json字符串解释为base64将json字符串解组为[]字节,并且您不能更改此设置(除非您编写自己的类型并实现自己的封送拆收器)。所以:解组成字符串。请阅读整个包文档,详细说明。使用自定义类型和自定义封送处理程序
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)
}