to_json,cgi自动输出json, 也方便调试
C++开发 cgi, 经常需要输出json格式的数据。有些数据有重复的元素,每次写这些东西既容易出错,又繁琐。 在查看msgpack这个序列化库代码的时候,受到启发,写了个to_json.hpp的库,可以方便输出json数据。
使用范例:
#include "to_json.hpp"
#include <stdio.h>
struct A
{
int a;
struct B {
int i;
std::string name;
std::vector<std::string> other;
DEF_TO_JSON_MEM3(i, name, other)
};
std::vector<int> b;
B c;
};
DEF_TO_JSON3(A, a, b, c)
int main(int argc, const char *argv[])
{
A a;
a.a = 1;
a.b.push_back(2);
a.b.push_back(3);
a.b.push_back(4);
a.c.i=4;
a.c.name="piboye";
a.c.other.push_back("piboye1");
a.c.other.push_back("piboye2");
std::string out = to_json(a);
printf("%s\n", out.c_str());
return 0;
}
输出:
{"a":1,"b":[2,3,4],"c":{"i":4,"name":"piboye","other":["piboye1","piboye2"]}}
DEF_TO_JSON3 定义个全局的 to_json函数, 可以格式化类型 A, 3 表示要输出类的3个成员。
DEF_TO_JSON_MEM3 表示定义类的成员方法 to_json
to_json.hpp.pump 是借鉴了 gtest使用的 pump.py工具来减少重复代码。
to_json 不光可以实现cgi吐 json, 可以用于调试你的程序,比如打日志的时候输出某个对象的值。
LOG(DEBUG," var a is %s", to_json(a).c_str());