Golang : Bson\Json互转

这篇具有很好参考价值的文章主要介绍了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)
}

运行
Golang : Bson\Json互转,Golang基础编程,golang,json,开发语言
代码:

https://download.csdn.net/download/halo_hsuh/12288107文章来源地址https://www.toymoban.com/news/detail-782568.html

到了这里,关于Golang : Bson\Json互转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • golang map json 结构体

    要将JSON转换为Go结构体,您可以使用json.Unmarshal()函数。首先,您需要定义一个与JSON数据结构匹配的Go结构体,然后使用json.Unmarshal()将JSON数据解码为该结构体。 以下是一个示例: 假设有如下JSON数据: 您可以将其转换为Go结构体如下: 在上面的示例中,我们定义了一个名为

    2024年02月08日
    浏览(38)
  • Golang校验字符串是否JSON格式方法json.Valid源码解析

    上篇文章《Golang中如何校验字符串是否为JSON格式?》主要讲解了使用json.Valid校验字符串是否JSON格式的使用方法,本文来剖析一下json.Valid方法的源码。 json.Valid方法定义: scan := newScanner() 获取一个 scanner 类型的对象,关键的是checkValid方法,checkValid源码如下: 首先调用了sc

    2023年04月26日
    浏览(43)
  • golang post https 请求json数据

    在Go语言中发送HTTPS请求并传递JSON数据,可以使用标准库中的 net/http 和 encoding/json 包。HTTPS是基于SSL/TLS的安全协议,可以保护数据在传输过程中不被篡改或窃取。 以下是一个使用HTTPS协议发送POST请求并传递JSON数据的示例代码: 在上面的代码中,我们首先创建一个map类型的

    2024年02月06日
    浏览(48)
  • golang面试题:json包变量不加tag会怎么样?

    json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段? 如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。 如果变量首字母大写,则为public。 不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从

    2024年02月08日
    浏览(33)
  • Golang 中空的切片转化成 JSON 后变为 null 的问题如何解决?

    目录 问题 原因 小结 在 Golang 中,经常需要将其他类型(例如 slice、map、struct 等类型)的数据转化为 JSON 格式。有时候转化的结果并不是预期中的,例如将一个空的切片转化为 JSON 时,会变成\\\"null\\\",而并非预期的\\\"[]\\\"。示例代码如下: 运行示例看下结果: 结果输出的值为 “

    2024年02月07日
    浏览(45)
  • golang 多个struct 转换融合为一个json,平级融合或者多级融合

    1. 平级融合,就是下面例子,虽然A在B里面,但是A在struct B里面没有名字,输出结果就是A 和B在同一级的json下面。 输出:{\\\"name\\\":\\\"new name\\\",\\\"description\\\":\\\"desc\\\",\\\"url\\\":\\\"https://example.com\\\"} 2. 两级json, 输出:{\\\"name\\\":\\\"new name\\\",\\\"Adata\\\":{\\\"name\\\":\\\"test\\\",\\\"description\\\":\\\"desc\\\",\\\"url\\\":\\\"https://example.com\\\"}}

    2024年02月09日
    浏览(43)
  • 「JSON对象互转工具」JSON转对象、对象转JSON

    Fastjson 是一款高性能的 JSON 解析库,提供了丰富而强大的方法来处理 JSON 数据。下面是一些常用的 Fastjson, 方法的详解: Fastjson 的 Maven 依赖 toJSONString(Object object) :将 Java 对象转换为 JSON 字符串。 parseObject(String text, TypeReferenceT type) :将 JSON 字符串解析为指定类型的对象 。

    2024年02月15日
    浏览(38)
  • 编程笔记 Golang基础 012 项目构建

    如何构建和组织一个项目,是学习该语言编程的开始。 Go 语言中的模块(Module)、包(Package)和文件有着紧密的关系,它们共同构成了 Go 语言的代码组织结构和依赖管理机制: 模块(Module) : Go 语言从 1.11 版本开始引入了模块系统,用于管理和解决依赖问题。 模块是一个

    2024年02月21日
    浏览(40)
  • 编程笔记 Golang基础 010 常量和变量

    在 Go 语言中,常量(Constant)是一个固定的值,在程序运行期间不可被修改。它们通常用来表示那些在整个程序执行过程中不会变化的数值或其他类型的数据。在 Go 语言中,变量是用来存储数据的容器。 在 Go 语言中,常量(Constant)是一个固定的值,在程序运行期间不可被

    2024年02月21日
    浏览(47)
  • 编程笔记 Golang基础 016 数据类型:数字类型

    在Go语言中,数字类型是其丰富数据类型的一部分,主要用于表示数值。 以下是Go语言中主要的数字类型详解: 1. 整数类型(Integer Types) a) 固定长度整数: 有符号整数 : int8 :8位带符号整数,范围从-128到127。 int16 :16位带符号整数,范围从-32,768到32,767。 int32 :32位带符号

    2024年02月22日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包