Golang-处理json


Marshal

marshal的中文意思是“编码”,“数据打包”的意思

基本操作

编码

json.Marshal(v interface{}) ([]byte, error)

即将一个struct对象序列化成字节数组.

解码

json.Unmarshal(data []byte, v interface{}) error

即将字节数组反序列化成对象

当我们不知道json的具体结构时,可以使用interface{}接口:

var f interface{}
err := json.Unmarshal(b, &f)

如果需要访问f则需要先转换成map:

m := f.(map[string]interface{})

然后根据具体的value type进行取值:value.(type).

流式编解码

func NewDecoder(r io.Reader) *Decoder
func NewEncoder(w io.Writer) *Encoder

编码

func TestBasicEncoder(t *testing.T) {
    userInfo := UserInfo{Username: "jk", Gender: 1, Age: 18}
    bytes := new(bytes2.Buffer)
    err := json.NewEncoder(bytes).Encode(&userInfo)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(bytes.Bytes()))
}

解码

func TestBasicDecoder(t *testing.T) {
    var userInfo UserInfo
    str := `{"username":"jk","age":18,"gender":1}`
    err := json.NewDecoder(strings.NewReader(str)).Decode(&userInfo)
    if err != nil {
        panic(err)
    }
    fmt.Println(userInfo)
}

文章作者: 姜康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜康 !
评论
  目录