登录
首页 >  Golang >  Go问答

使用golang对json数据解码到一个结构体的切片

来源:stackoverflow

时间:2024-03-05 14:36:24 114浏览 收藏

大家好,今天本人给大家带来文章《使用golang对json数据解码到一个结构体的切片》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

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 数据


解决方案


您可能需要对十六进制数据进行编码:

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

默认的 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))
}

本篇关于《使用golang对json数据解码到一个结构体的切片》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>