一.下载源代码并编译
使用cmake工具。
安装例子:apt-get install cmake
git clone https://github.com/open-source-parsers/jsoncpp.git
cd jsoncpp
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=release -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DARCHIVE_INSTALL_DIR=. -G "Unix Makefiles" ..
make
# 安装或者不安装都没必要
# sudo make install
在jsoncpp/build/bin生成了测试elf:jsoncpp_test
在jsoncpp/build/lib生成了库:libjsoncpp.a
头文件目录 jsoncpp/include
调用./jsoncpp_test
这里就基本编译完成了
二.使用实例
简单的格式校验工具:
在同个jsoncpp的目录下,创建目录jsonchecktool,并进入其目录
mkdir -p jsonchecktool
cd jsonchecktool
编写Makefile文件
vim Makefile
内容如下:
all:jsonchecktool
jsonchecktool: jsonchecktool.cpp
g++ jsonchecktool.cpp -L ../jsoncpp/build/lib -ljsoncpp -I ../jsoncpp/include -o jsonchecktool
test:jsonchecktool
echo 测试 ok.json
./jsonchecktool ok.json ok.format.json
echo 测试 error.json
./jsonchecktool error.json
clean:
rm jsonchecktool
c++的代码文件:jsonchecktool.cpp
内容如下:
#include <iostream>
#include <fstream>
#include <string>
#include <json/json.h>
using namespace std;
using Json::Reader;
using Json::Value;
using Json::String;
using Json::StyledWriter;
int main(int len, const char *argv[]) {
if(len<2){
printf("E: 语法错误\n");
printf("I: 语法: ./jsonchecktool <json源文件> [json的目标文件]\n");
exit(-1);
}
ifstream ifs(argv[1]);
Reader reader;
Value obj;
reader.parse(ifs, obj); // reader can also read strings
// 检测json的读是否异常
if (!reader.good()) {
// 异常
String errInfo = reader.getFormattedErrorMessages();
cout<<"E: json检验不通过!!!"<<endl;
cout<<errInfo<<endl;
exit(0);
} else {
// 正常,格式化输出,后缀名: .format.json
const char * outFilePath = nullptr;
if(len>2) outFilePath = argv[2];
else {
// 文件路径一般不能超过256长度的
char * outFilePathT = new char[256+20];
sprintf(outFilePathT, "%s/.format.json", argv[1]);
outFilePath = outFilePathT;
}
//输出带格式的字符串
StyledWriter sw;
ofstream os;
os.open(outFilePath, ios::out);
if (!os.is_open()) {
cout << "can not find or create file:"<< outFilePath << endl;
if(len<=2) delete[] outFilePath;
exit(-1);
}
os << sw.write(obj);
os.close();
cout<<"I: json检验通过!!!"<<endl;
cout<<"I: 格式化输出文件:"<<outFilePath<<endl;
if(len<=2) delete[] outFilePath;
}
}
编译工具代码:
make
生成了文件: jsonchecktool
三.测试和使用json的校验工具
编写正常的json的文件:ok.json
{
"age" : "20",
"classmate" : [
{
"age" : "20",
"name" : "lisi",
"sex" : "male"
},
{
"age" : "20",
"name" : "wangwu",
"sex" : "male"
}
],
"course" : [ "math", "english", "chiness" ],
"name" : "zhangsan",
"sex" : "male"
}
编写错误的json文件:err.json
{
"age" : "20",
"classmate" : [
{
"age": "20"
[],
"name" : "lisi",
"sex" : "male"
},
{
"age" : "20",
"name" : "wangwu",
"sex" : "male"
}
],
"course" : [ "math", "english", "chiness" ],
"name" : "zhangsan",
"sex" : "male"
}
测试指令:
make test
结果: