Go格式化輸出
阿新 • • 發佈:2018-12-03
1、GO資料型別轉化為JSON型別
函式原型:
func Unmarshal(data []byte, v interface{}) err
GO資料型別輸出為JSON型別示例
package main import ( "encoding/json" "fmt" ) type Test struct{ Name string Age int Phone string Addres string } func main() { var name = "xiaoming" var age = 13 var phone = "23243234" var add = "beijing" t := &Test{name,age,phone,add} b, err := json.Marshal(t) if err != nil { fmt.Println("Marshal fail") } fmt.Println(b) fmt.Println(string(b)) }
2、JSON型別轉化為GO資料型別
函式原型:
func Marshal(v interface{})([]byte, error)
JSON型別輸出為Go資料型別示例
package main import ( "encoding/json" "fmt" ) func main ( ) { var jsonBlob = [ ] byte ( ` [ { "Name" : "Platypus" , "Order" : "Monotremata" } , { "Name" : "Quoll" , "Order" : "Dasyuromorphia" } ] ` ) type Animal struct { Name string Order string } var animals [ ] Animal err := json. Unmarshal ( jsonBlob , & animals ) if err != nil { fmt. Println ( "error:" , err ) } fmt. Println( animals ) }
結構體欄位標籤
json包在解析結構體時,如果遇到key為json的欄位標籤,則會按照一定的規則解析該標籤:第一個出現的是欄位在JSON串中使用的名字,之後為其它選項,指定的空值欄位不出現在JSON中,如果整個value為"-",則不解析該欄位,例如見上述結構體修改為如下:
type Test struct{ Name string `json:"name,omitempty"` Age int `json:"age"` Phone string `json:"-"` Address string `json:"add"` } func main() { var name = "xiaoming" var age = 13 var phone = "23243234" var add = "beijing" t := &Test{name,age,phone,add} b, err := json.Marshal(t) if err != nil { fmt.Println("Marshal fail") } fmt.Println(b) fmt.Println(string(b)) }