// {"stu_name": "Aki", "stu_age": 19}type Stu struct{
Name string`json:"stu_name"`
Age int`json:"stu_age"`}
-
指定字段不参与编码(无论是否有值)
type Stu struct{
Name string`json:"name"`
Age int`json:"-"`}
omitempty
如果字段为空, 则不参与编码
如果忽略的字段是嵌套结构体,则不生效。可修改嵌套类型为指针实现
可用作简化传输大小使用
package main
import("encoding/json""fmt")type Stu struct{
Name string`json:"name,omitempty"`
Age int`json:"age"`}funcmain(){
stu := Stu{
Age:18,}
marshal,_:= json.Marshal(stu)
fmt.Println(string(marshal))// name 字段为空// 如果未定义 omitempty,则结果为 {"name":"","age":18}// 如果定义了 omitempty,则结果为 {"age":18}}
inline
解码时,支持嵌套匿名结构体的解析
package main
import("encoding/json""fmt")type Stu struct{
Name string`json:"name,omitempty"`
Age int`json:"age"`
Score `json:",inline"`}type Score struct{
English int`json:"english"`
Chinese int`json:"chinese"`
Math int`json:"math"`}funcmain(){
data :=`{"name":"aki", "age":18, "english": 88, "math": 88}`var stu Stu
json.Unmarshal([]byte(data),&stu)
fmt.Printf("%+v\n", stu)}
实用技巧
输出美观
package main
import("encoding/json""fmt")funcmain(){// 序列化
m :=map[string]int{"chinese":100,"math":99,}
b,_:= json.MarshalIndent(m,""," ")
fmt.Println(string(b))}// 结果如下// {// "chinese": 100,// "math": 99// }