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());


posted @ 2011-09-20 11:25  napoleon_liu  阅读(3340)  评论(2编辑  收藏  举报