1. 介绍
文档地址:https://pkg.go.dev/encoding/json
Go 标准库 encoding/json 用于进行json的编码和解码。
结构体编码为字符串示例:
type People struct {
Name string `json:"name"`
Age int64 `json:"age"`
}
p := People{Name: "Moondo", Age: 10}
marshal, err := json.Marshal(p)
fmt.Printf("%s\n", marshal)
字符串解码为结构体示例:
type People struct {
Name string `json:"name"`
Age int64 `json:"age"`
}
str := "{\"name\":\"Moondo\",\"age\":10}"
var p People
err := json.Unmarshal([]byte(str), &p)
fmt.Printf("%s\n", p.Name)
2. 类型
2.1 RawMessage
类型定义:
// RawMessage json字符串
type RawMessage []byte
方法:
// MarshalJSON 编码并返回
func (m RawMessage) MarshalJSON() ([]byte, error)
// UnmarshalJSON 从data赋值自身
func (m *RawMessage) UnmarshalJSON(data []byte) error
2.2 Decoder
类型定义:
// Decoder 从输入流读取和解码json
type Decoder struct {
// contains filtered or unexported fields
}
方法:
// NewDecoder 创建对象
func NewDecoder(r io.Reader) *Decoder
// Buffered 获取对应的Reader
func (dec *Decoder) Buffered() io.Reader
// Decode 从输入流读取json并解码至v
func (dec *Decoder) Decode(v any) error
// 获取输入流offset
func (dec *Decoder) InputOffset() int64
// More 是否还有待处理
func (dec *Decoder) More() bool
2.3 Encoder
类型定义:
// Encoder 编码写到输出流
type Encoder struct {
// contains filtered or unexported fields
}
方法:
// NewEncoder 创建对象
func NewEncoder(w io.Writer) *Encoder
// Encode 将v编码写到输出流
func (enc *Encoder) Encode(v any) error
// SetEscapeHTML 设置HTML转码
func (enc *Encoder) SetEscapeHTML(on bool)
// SetIndent 设置缩进
func (enc *Encoder) SetIndent(prefix, indent string)
3. 函数
// Marshal 将变量编码为json字符串
// 结构体成员通过json标签设置转为json的key,如`json:"Name"`
// `json:"Name,omitempty"`表示当成员为空值时不输出json key
// `json:"Name,string"` 表示输出json的value为字符串
// `json:"-"`表示该成员不输出json key
// `json:"-,"`表示该成员json key为"-"
func Marshal(v any) ([]byte, error)
// MarshalIndent 将变量编码为json字符串,带缩进
func MarshalIndent(v any, prefix, indent string) ([]byte, error)
// Unmarshal 将json字符串解码至变量
// json的value类型对应接收的go类型:
// boolean -> bool
// number -> float64
// string -> string
// array -> []interface{}
// object -> map[string]interface{}
// null -> nil
func Unmarshal(data []byte, v any) error
// Valid 是否合法json
func Valid(data []byte) bool
// Compact 将src的json字符串去掉空字符串,写入dst
func Compact(dst *bytes.Buffer, src []byte) error
// Indent 将src的json字符串添加缩进,写入dst
func Indent(dst *bytes.Buffer, src []byte, prefix, indent string) error
// HTMLEscape 将src的json字符串进行HTML转码,如<转为\u003c,写入dst
func HTMLEscape(dst *bytes.Buffer, src []byte)