1 Star 0 Fork 0

xyz347 / xbson

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

xbson

  • 用于在C++结构体和bson之间互相转换
  • 依赖于xpack
  • 使用方法请参考xpack
  • xbson自身只有头文件, 无需额外编译库文件,依赖于libbson,在thirdparty目录下。
  • 这个库可以配合mongoxclient使用

目录

encoder

用于将结构体转成bson格式。范例:

struct Test {
	int64_t     id;
	std::string name;
	std::string email;
	XPACK(A(id, "bson:_id"), O(name, email));
};

Test t;
std::string data = xpack::bson::encode(t); // data就是t转成bson的数据

关于XPACK的使用,请参考xpack

decoder

用于将bson数据转成结构体 用于将结构体转成bson格式。范例:

struct Test {
	int64_t     id;
	std::string name;
	std::string email;
	XPACK(A(id, "bson:_id"), O(name, email));
};

std::string data;
// data = xxxx; data存储了相应的bson数据
Test t;
xpack::bson::decode(data, t);
// xpack::bson::decode 还有另一个参数方式:static void decode(const uint8_t* data, size_t len, T &val)

关于XPACK的使用,请参考xpack

bsontypes

  • date time: bson_date_time_t
  • timestamp: bson_timestamp_t
  • binary: bson_binary_t
  • regex: bson_regex_t
  • oid: bson_oid_t
  • decimal128: bson_decimal128_t

前4种是xbson额外定义的,后面两种是定义在libbson内的,为了统一,前4种也是定义在全局命名空间。

builder

需要C++11或以上版本支持。用json的格式来构造bson数据。查询接口中的query,一般只需要指定很少几个字段,这个场景用结构体表达不是很方便。用builder就会简单很多。基本用法是:

  1. 定义一个BsonBuilder:
    • 参数是一个json格式的字符串
    • 里面的双引号用单引号替代
    • 变量用问号作为占位符,问号后面可以加一个单词用来作为助记符,比如"?"和"?uid"是等效的
    • key也可以是变量,key作为变量,问号不用加引号
    • BsonBuilder是线程安全的,建议定义为static变量,这样json字符串只需解析一次 范例:
static xpack::BsonBuilder bd("{'_id':?, ?:?}"); // 带占位符的builder
static xpack::BsonBuilder empty("{}");   // 空bson
static xpack::BsonBuilder student("{'type':'student'}"); // 不带占位符的builder
  1. 调用Encode函数来构造bson数据,Encode的参数对应的是各个占位符,因此参数个数应该和占位符一致 比如对于上述的BsonBuilder
std::string data1 = bd.Encode(12345, "type", "master");
std::string data2 = empty.Encode();
std::string data3 = student.Encode();
// 这些bson的数据可以用在mongoxclient的各个接口中
  1. 其他的一些API
    • EncodeAsJson 和Encode类似,但是输出的是json格式的数据,可以用于调试等场景(所以这个其实也是个JsonBuilder)
    • Error 如果构造BsonBuilder的json字符串有误,这个接口可以返回错误信息
    • static std::string En(const std::string&fmt, Args... args)。这个是把构造BsonBuilder和Encode合在一起了,不是很建议使用,建议用于调试,因为每次都要构造一次BsonBuilder

重要说明

  • bson的反序列化用的是libbson
  • bson的序列化是我自己写的,没有参考相应标准,可能有和标准不一样的地方.
  • libbson是预编译的. 环境是: Ubuntu12.04 g++4.9.2. 其他环境如果想使用该库文件可能需要自行编译

空文件

简介

暂无描述 展开 收起
C++ 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/xyz347/xbson.git
git@gitee.com:xyz347/xbson.git
xyz347
xbson
xbson
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891