type User struct { Name string `json:"name,omitempty" bson:"name,omitempty"` Secret string `json:"-,omitempty" bson:"secret,omitempty"` }
package bson_json import ( "encoding/json" "errors" "fmt" "gopkg.in/mgo.v2/bson" "os" "testing" ) type User struct { Name string `json:"name,omitempty" bson:"name,omitempty"` CSDN string `json:"csdn,omitempty" bson:"csdn,omitempty"` Quote string `json:"quote,omitempty" bson:"quote,omitempty"` } var user = User{ Name: "許大俠", CSDN : "https://blog.csdn.net/halo_hsuh", Quote: "聽我一言, 看清遠方", } func toBsonBytes() []byte { /* 結構體序列化成bson格式[]byte */ data, err := bson.Marshal(user) if nil != err { fmt.Println("序列化Bson失敗") return nil } return data } func toJsonBytes() []byte { /* 結構體序列化成bson格式[]byte */ data, err := json.Marshal(user) if nil != err { fmt.Println("序列化Json失敗") return nil } return data } func ToFile(fileName string, data []byte) error { file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0666) if nil != err { return err } length, err := file.Write(data) if nil != err { return err } if length < len(data) { return errors.New("Write Error: Length Error.") } return nil } func Print(u User) { fmt.Println("名字: ", u.Name, "; CSDN: ", u.CSDN, "; 名言: ", u.Quote) } func TestBson(t *testing.T) { var tempUser User data := toBsonBytes() /* bson格式[]byte 反序列化成結構體 */ err := bson.Unmarshal(data, &tempUser) if nil != err { fmt.Println("反序列化Bson失敗", err) return } Print(tempUser) ToFile("./hello.bson", data) // 將序列化的數據存儲進文件 } func TestJson(t *testing.T) { var tempUser User data := toJsonBytes() /* bson格式[]byte 反序列化成結構體 */ err := json.Unmarshal(data, &tempUser) if nil != err { fmt.Println("反序列化Json失敗: ", err) return } Print(tempUser) ToFile("./hello.json", data) // 將序列化的數據存儲進文件 } func TestJsonToBson(t *testing.T) { // 獲取json []byte data := toJsonBytes() fmt.Println(data) var tempUser User // 將json轉化成bson 結構體 err := bson.UnmarshalJSON(data, &tempUser) if nil != err { fmt.Println("Json 轉 Bson失敗: ", err) } Print(tempUser) // 結構體再轉化為json data2, err := bson.MarshalJSON(tempUser) if nil != err { fmt.Println("Bson 轉 Json失敗: ", err) } fmt.Println(data2) }