1、首先要在Linux下面安装jsoncpp库:
在Ubuntu终端中输入 sudo apt-get install libjsoncpp-dev 命令;
2、在你编写的项目例程中添加上头文件,“ #include <jsoncpp/json/json.h>”;
3、 编译的时候要加上 -ljsoncpp 命令;
4、在Linux下使用c++解析json文件:
<1>向文件中写入json格式内容
#include <jsoncpp/json/json.h>
#include <fstream>
using namespace std;
int main()
{
Json::Value root;
// 组装json内容
root["occupation"] = "paladin";
root["camp"] = "alliance";
root["role_id"] = 1;
// 将json内容(缩进格式)输出到文件
Json::StyledWriter writer;
ofstream os;
os.open("test.json");
os << writer.write(root);
os.close();
return 0;
}
编译完后执行可执行文件,在“test.json”的文件会生成如下内容:
<2> 从文件中读取json格式的内容,并打印出来
#include <iostream>
#include "jsoncpp/json/json.h"
#include <stdio.h>
#include <string>
#include <memory>
#include <fstream>
using namespace std;
int main(int argv, char* argc[])
{
Json::Value root;
Json::Value header;
Json::Value arrayObj;
Json::Value item;
header["pro"]="17";
header["service_type"]="GPS11";
char buffer[1000];
ifstream in("text.txt");
int i=0;
if(!in.is_open()){ //判断文件是否打开,没打开直接退出
cout<<"Error opening file";
exit(1);
}
while(!in.eof()){ //判断文件是否读取完成
in.getline(buffer,100);
item[buffer]=i;
i++;
arrayObj.append(item);
item.clear();
}
root["HEADER"] =header;
root["BODYLIST"] =arrayObj;
std::string out =root.toStyledString(); //将json格式内容转化为字符串
std::cout << out << std::endl;
in.close();
return 0;
}
编译执行后运行结果如下:
<3>定义json变量,赋值并以字符串的形式在终端输出:
#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>
using namespace std;
int main(){
Json::Value json_temp;
json_temp["name"] = Json::Value("sharexu");
json_temp["age"] = Json::Value(18);
Json::Value root;
root["key_string"] = Json::Value("value_string");
root["key_number"] = Json::Value(12345);
root["key_boolean"] = Json::Value(false);
root["key_double"] = Json::Value(12.345);
root["key_object"] = json_temp;
root["key_array"].append("array_string");
root["key_array"].append(1234);
Json::FastWriter fast_writer;
std::cout << fast_writer.write(root); //第一种输出形式
Json::StyledWriter styled_writer;
std::cout << styled_writer.write(root); //第二种输出形式,以json样式输出
string str_test ="{\"id\":1,\"name\":\"pacozhong\"}";
Json::Reader reader; //定义读取 json的变量
Json::Value value;
if (!reader.parse(str_test, value)) //解析json内容
return 0;
string value_name=value["name"].asString(); //将name中的值转化为字符串
cout <<value_name<<endl; //第三种输出形式
cout <<value["name"]; //第四种输出形式
if(!value["id"].isInt()){
cout<<"id is not int"<<endl;
}else{
int value_id=value["id"].asInt();
cout<<value_id<<endl;
}
return 0;
}
第一种输出形式结果:
第二种输出形式结果:
第三种输出形式结果:
第四种输出形式结果:
<4>读取json文件:
#include <jsoncpp/json/json.h>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
// 以二进制形式读取json文件内容
ifstream is("test.json", ios::binary);
if (!is.is_open())
{
cout << "open json file failed." << endl;
return -1;
}
Json::Reader reader;
Json::Value root;
int nRole = 0;
string strOccupation;
string strCamp;
// 解析json内容
if (reader.parse(is, root))
{
nRole = root["role_id"].asInt();
strOccupation = root["occupation"].asString();
strCamp = root["camp"].asString();
}
is.close();
cout << "role_id is: " << nRole << endl;
cout << "occupation is: " << strOccupation << endl;
cout << "camp is: " << strCamp << endl;
return 0;
}
运行结果如下: