项目需要用到C++对Json进行编码和编译,今天整理了下对应的方法做了测试
我用的jsoncpp代码库。
参考文章:C++处理JSON数据和在face++ 调用中的使用
测试代码
#include <iostream>
#include <fstream>
#include "json/json.h"
using namespace std;
#define IN_FILENAME "data.json"
#define FAST_OUT_FILENAME "fastout.json"
#define STYLE_OUT_FILENAME "styleout.json"
class JsonTest{
public:
//读取Json文件
void readJson(){
ifstream fin(IN_FILENAME);//打开本地文件
if( !fin ) //错误处理
{
cout << "Error opening " << IN_FILENAME << " for input" << endl;
exit(-1);
}
// const int LINE_LENGTH = 100;
// char str[LINE_LENGTH];
// while(fin.getline(str,LINE_LENGTH)){//按行输出
// cout<<"Read from file:"<<str<<endl;
// }
Json::Reader reader;//解析json用Json::Reader
Json::Value root;// Json::Value是一种很重要的类型,可以代表任意类型。如int, string, object, array
if(reader.parse(fin,root,false)){
string name = root["name"].asString();//读取字符串
int type = root["type"].asInt();//读取int
printf("name:%s,type:%d\n",name.c_str(),type);
string dataname = root["data"]["name"].asString();//读取对象
cout<<"dataname:"<<dataname<<endl;
int pay = root["data"]["pay"][1].asInt();//读取数组
cout<<"pay:"<<pay<<endl;
}
fin.close();
}
//写入Json文件
void writeJson(){
Json::StyledWriter styled_writer;
Json::FastWriter faset_writer;//快速写入
Json::Value root;
root["name"] = Json::Value("bill");//加入字符串
root["age"] = Json::Value(32);//加入int
root["score"] = Json::Value(99.99);//加入浮点类
root["friends"].append("Amy");//加入数组
root["hope"]["book"] = Json::Value("C++");//加入对象
ofstream fout(FAST_OUT_FILENAME);
fout<<faset_writer.write(root);//写入文件
fout.close();
fout.open(STYLE_OUT_FILENAME);
fout<<styled_writer.write(root);
fout.close();
}
};
int main(int argc, char **argv)
{
JsonTest* test = new JsonTest();
test->readJson();
test->writeJson();
}
命令行输入
g++ jsoncpp.cpp jsonTest.cpp -o jsonTest
./jsonTest
进行测试