百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
X

xpack

> 数据库
开源

将 json/xml/bson 转换为 c++ 结构

659 stars0 点赞3 次浏览
访问官网GitHub

工具介绍

将 json/xml/bson 转换为 c++ 结构

xpack

English

  • 用于在C++结构体和json/xml/yaml/bson/mysql/sqlite之间互相转换
  • 只有头文件, 无需编译库文件,所以也没有Makefile。
  • 支持bson,依赖于libbson-1.0,需自行安装。未经充分测试,具体请参考README
  • 支持MySQL,依赖于libmysqlclient-dev,需自行安装。未经充分测试
  • 支持Sqlite,依赖于libsqlite3,需自行安装。未经充分测试
  • 支持yaml,依赖于yaml-cpp,需自行安装。未经充分测试
  • 具体可以参考example的例子

  • 基本用法
  • 容器支持
  • FLAG
  • 别名
  • 位域
  • 继承
  • 枚举
  • 自定义编解码
  • union
  • 不定类型
  • 数组
  • 第三方类和结构体
  • 格式化缩进
  • XML数组
  • CDATA
  • Qt支持
  • MySQL
  • 重要说明

基本用法

  • 结构体后面用XPACK宏包含各个变量,XPACK内还需要一个字母,不同字母的意义请参考FLAG
  • 用xpack::json::encode把结构体转json
  • 用xpack::json::decode把json转结构体
…

C++ #include #include "xpack/json.h"

using namespace std;

struct Test { long uid; string name; XPACK(A(uid, "id"), O(name)); // "uid"的别名是"id" };

int main(int argc, char *argv[]) { Test t; string json="{"id":123, "name":"Pony"}";

xpack::json::decode(json, t); 
cout

#include #include "xpack/json.h"

using namespace std;

/* struct timeval { time_t tv_sec; suseconds_t tv_usec; }; */

// timeval is thirdparty struct XPACK_OUT(timeval, O(tv_sec, tv_usec));

struct T { int a; string b; timeval t; XPACK(O(a, b, t)); };

int main(int argc, char *argv[]) { T t; T r; t.a = 123; t.b = "xpack"; t.t.tv_sec = 888; t.t.tv_usec = 999; string s = xpack::json::encode(t); couthello`也可以解析成功

Qt支持

  • 修改config.h,开启XPACK_SUPPORT_QT这个宏(或者在编译选项开启)
  • 当前支持 QString/QMap/QList/QVector

MySQL

  • 目前仅支持decode,还不支持encode
  • 未经过完整测试,使用需要谨慎
  • 当前支持类型有:
    • string。简单测试。
    • 整型。简单测试。
    • 浮点型。未测试。
    • 用整型(比如time_t)接收TIME/DATETIME/TIMESTAMP。未测试。
    • 自定义类型转换,is_xpack_mysql_xtype,类似于xtype。未测试。
  • api有两个(xpack::mysql::) :
    • static void decode(MYSQL_RES *result, T &val)
      • 用来将MYSQL_RES转成结构体或者vector<>,如果是非vector,则只转换第一个row
    • static void decode(MYSQL_RES *result, const std::string&field, T &val)
      • 用来解析某个字段,用于只想获得某个字段内容的场景,比如select id from mytable where name = lilei,只想获得id信息。val支持vector

重要说明

  • 变量名尽量不要用__x_pack开头,不然可能会和库有冲突。
  • vc6不支持。
  • msvc没有做很多测试,只用2019做过简单测试。
  • json的序列化反序列化用的是rapidjson
  • xml的反序列化用的是rapidxml
  • xml的序列化是我自己写的,没有参考RFC,可能有和标准不一样的地方.
  • 有疑问可以加QQ群878041110

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

C++bsoncppjsonmysql

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类数据库
定价开源

> 相关工具

P
PostgreSQL
功能强大的开源关系型数据库
R
Redis
内存数据结构存储,常用作缓存与队列
M
MySQL
广泛使用的开源关系型数据库