package main import ( "encoding/json" "fmt" ) type IT struct { //一定要注意这里的成员变量的名字首字母必须是大写 Company string Subjects []string Isok bool Price float64 } func main() { s := IT{"zyg", []string{"go", "python", "java"}, true, 3.14}//json的初始化 buf, err := json.Marshal(s)//使用这个函数会返回两个值,通过源码得知 if err != nil { fmt.Println("err = ", err) return } fmt.Println("buf = ", string(buf)) //注意这里生成的buf是一个byte切片,如果直接打印会是一串数字,这里使用string函数进行转化 }
执行的结果为
buf = {"Company":"zyg","Subjects":["go","python","java"],"Isok":true,"Price":3.14}
这样可读性不太好,如果用于展示可以使用这个函数
buf, err := json.MarshalIndent(s, "", " ")
执行的结果就会好看一些
buf = { "Company": "zyg", "Subjects": [ "go", "python", "java" ], "Isok": true, "Price": 3.14 }
当然这样的结果对于开发数据交换里可以会有问题,比如在Isok那一栏里就有可能别人需要的是“true",而不是true,那这样就可以使用_struct_tag方式
将结构体变更为这样的方式
type IT struct { Company string `json:"-"` //这样的方式可以让这个头不显示 Subjects []string `json:"subjects"` //这种方式二次编码 Isok bool `json:",string"` //将一栏的值显示为string类型 Price float64 }
执行的结果为
buf = { "subjects": [ //这里变更为小写了 "go", "python", "java" ], "Isok": "true", //这里变更为字符串了 "Price": 3.14 } company也没有再显示了