golang學習筆記--struct同時用於bson json


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)

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM