在代碼學習過程當中,發現struct定義中能夠包含`json:"name"`的聲明,因此在網上找了一些資料研究了一下golang
package main import ( "encoding/json" "fmt" ) //在處理json格式字符串的時候,常常會看到聲明struct結構的時候,屬性的右側還有小米點括起來的內容。`TAB鍵左上角的按鍵,~線同一個鍵盤` type Student struct { StudentId string `json:"sid"` StudentName string `json:"sname"` StudentClass string `json:"class"` StudentTeacher string `json:"teacher"` } type StudentNoJson struct { StudentId string StudentName string StudentClass string StudentTeacher string } //能夠選擇的控制字段有三種: // -:不要解析這個字段 // omitempty:當字段爲空(默認值)時,不要解析這個字段。好比 false、0、nil、長度爲 0 的 array,map,slice,string // FieldName:當解析 json 的時候,使用這個名字 type StudentWithOption struct { StudentId string //默認使用原定義中的值 StudentName string `json:"sname"` // 解析(encode/decode) 的時候,使用 `sname`,而不是 `Field` StudentClass string `json:"class,omitempty"` // 解析的時候使用 `class`,若是struct 中這個值爲空,就忽略它 StudentTeacher string `json:"-"` // 解析的時候忽略該字段。默認狀況下會解析這個字段,由於它是大寫字母開頭的 } func main() { //NO.1 with json struct tag s := &Student{StudentId: "1", StudentName: "fengxm", StudentClass: "0903", StudentTeacher: "feng"} jsonString, _ := json.Marshal(s) fmt.Println(string(jsonString)) //{"sid":"1","sname":"fengxm","class":"0903","teacher":"feng"} newStudent := new(Student) json.Unmarshal(jsonString, newStudent) fmt.Println(newStudent) //&{1 fengxm 0903 feng} //Unmarshal 是怎麼找到結構體中對應的值呢?好比給定一個 JSON key Filed,它是這樣查找的: // 首先查找 tag 名字(關於 JSON tag 的解釋參看下一節)爲 Field 的字段 // 而後查找名字爲 Field 的字段 // 最後再找名字爲 FiElD 等大小寫不敏感的匹配字段。 // 若是都沒有找到,就直接忽略這個 key,也不會報錯。這對於要從衆多數據中只選擇部分來使用很是方便。 //NO.2 without json struct tag so := &StudentNoJson{StudentId: "1", StudentName: "fengxm", StudentClass: "0903", StudentTeacher: "feng"} jsonStringO, _ := json.Marshal(so) fmt.Println(string(jsonStringO)) //{"StudentId":"1","StudentName":"fengxm","StudentClass":"0903","StudentTeacher":"feng"} //NO.3 StudentWithOption studentWO := new(StudentWithOption) js, _ := json.Marshal(studentWO) fmt.Println(string(js)) //{"StudentId":"","sname":""} studentWO2 := &StudentWithOption{StudentId: "1", StudentName: "fengxm", StudentClass: "0903", StudentTeacher: "feng"} js2, _ := json.Marshal(studentWO2) fmt.Println(string(js2)) //{"StudentId":"1","sname":"fengxm","class":"0903"} }
參考:json
GO語言JSON簡介ide