目錄golang
經過結構體生成json,結構體屬性字段名首字母要大寫json
package main import ( "encoding/json" "fmt" ) type Person struct { Name string Hobby string } func main() { p := Person{"luhan", "男"} //1.生成JSON文本 b, err := json.Marshal(p) if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b)) //2.生成格式化json,沒啥用 b, err = json.MarshalIndent(p, "", " ") if err != nil { fmt.Println("json err:", err) } fmt.Println(string(b)) }
struct tag
-是隱藏字段函數
也能夠直接寫別名,包含首字母小寫的單詞編碼
經過map生成jsoncode
package main import ( "encoding/json" "fmt" ) func main() { //建立map mmp := make(map[string]interface{}) mmp["name"] = "luhan" mmp["age"] = 56 mmp["niubility"] = true //map轉爲json mjson, err := json.Marshal(mmp) if err != nil { fmt.Println("json err:", err) } fmt.Println(string(mjson)) }
解析到結構體接口
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Hobby string `json:"hobby"` } func main() { //1.準備一段json b := []byte(`{"Name":"luhan","Hobby":"男"}`) //2.聲明結構體 var p Person //3.解析 err := json.Unmarshal(b, &p) if err != nil { fmt.Println("json err:", err) } fmt.Println(p) }
解析到interfacestring
package main import ( "encoding/json" "fmt" ) func main() { //1.準備一段json b := []byte(`{"Name":"luhan","Hobby":"男"}`) //2.聲明空接口 var i interface{} //3.解析 err := json.Unmarshal(b, &i) if err != nil { fmt.Println("json err:", err) } //自動轉map fmt.Println(i) //4.使用interface的json,能夠判斷類型 m := i.(map[string]interface{}) for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "是string類型", vv) case int: fmt.Println(k, "是int類型", vv) default: fmt.Println(k, "是其餘類型") } } }