1. 程式人生 > >Go格式化輸出

Go格式化輸出

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))
}