type
status
date
slug
summary
tags
category
icon
password
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) *Decoderfunc 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) }
- 作者:姜康
- 链接:https://jiangkang.tech/article/9c6da6ec-f200-4772-b478-eac4bda6218e
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。