Golang : Bson\Json互转

代码

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

运行
在这里插入图片描述
代码:

https://download.csdn.net/download/halo_hsuh/12288107

相关推荐

  1. QT : Bson\Json

    2024-01-09 07:42:01       66 阅读
  2. 【maskjson】文件

    2024-01-09 07:42:01       78 阅读
  3. vue json字符串和Hex

    2024-01-09 07:42:01       39 阅读
  4. FastJson==xml与json格式工具类

    2024-01-09 07:42:01       26 阅读
  5. Date与LocalDate

    2024-01-09 07:42:01       57 阅读
  6. jsonyolo格式

    2024-01-09 07:42:01       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-09 07:42:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-09 07:42:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-09 07:42:01       82 阅读
  4. Python语言-面向对象

    2024-01-09 07:42:01       91 阅读

热门阅读

  1. 设置5台SSH互免的虚拟机服务器配置

    2024-01-09 07:42:01       58 阅读
  2. 第28关 k8s监控实战之Prometheus(五)

    2024-01-09 07:42:01       66 阅读
  3. 【适用于Jetson Orin Nano的录屏软件】

    2024-01-09 07:42:01       56 阅读
  4. C结构体声明,定义,初始化(赋值),访问

    2024-01-09 07:42:01       50 阅读
  5. 【国标】点播与对讲的sip流

    2024-01-09 07:42:01       45 阅读
  6. huggingface实战bert-base-chinese模型(训练+预测)

    2024-01-09 07:42:01       56 阅读
  7. 实验五:动态路由配置

    2024-01-09 07:42:01       52 阅读