最近在做项目的时候遇到一个要打印出文件的需求,还要作为另外一个程序的输入。这明显是数据交换。
要么我要跟接收方定好数据格式,然后打印文件,解析文件。也不是不行,只是写这些没有技术含量的代码实在是浪费生命。
这时候就想到能不能用通用的工具来搞定?首先我想到的是json和xml。xml我是真不太喜欢,太丑了,辣眼睛。那就选json吧。
然后找json库。刚开始我看很多人推荐rapid json。说是业界最快的库。我看了几个例子,感觉不好用,或者是我没看太懂吧。如果看懂了,估计也没啥难度。后来又翻了个nlohmann的用法例子。跟stl很像。那就用这个吧。
int main()
{
cout << "Hello world!" << endl;
json js;
ifstream jsFile("test.json");
jsFile >> js ;
double pi = js.at("pi");
std::vector<unsigned> regs ;
for(unsigned i=0 ; i<js.at("regs").size() ; i++)
{
regs.push_back(js.at("regs")[i]);
cout<< regs[i] << endl ;
}
cout << pi << endl;
jsFile.close();
ofstream jsOut("out.json");
jsOut<< js <<endl;
jsOut<< js <<endl;
jsOut.close();
return 0;
}
{
"pi":3.1415,
"happy":true,
"regs": [11,12,3]
}
读这个文件,然后打印出来,感觉很好用。
忘了说,这个库很好下,百度nlohmann 就会把你指到git 上下载了。
https://github.com/nlohmann/json/releases/tag/v3.9.1
我建议还是下载TAG比较好,不要直接下载master。
解压之后里面有个single include。把这个文件拷贝到项目工程下就可以直接include了。很容易,不用像某些库似的还要编译成静态动态库之类的。头文件大概900多K,里面大部分都是注释说明。