项目中需要将jsoncpp转为rapidjson (经过测试,rapidjson解析性能优于jsoncpp),现将两者语法整理分享:
推荐:rapidjson官方中文文档http://miloyip.github.io/rapidjson/zh-cn/
file.json:
{file: {key: "value",array: [{key00: "value00",key01: "value01" },{key10: "value10",key11: "value11"}]}}
rapidjson语法:
#include <iostream> #include <fstream> #include <sstream> #include "rapidjson/rapidjson.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" int main() { //读取文件 std::fstream fs("file.json"); if(!fs) std::cout<<std::endl<<"file open Failed"<<std::endl; std::stringstream ss; ss << fs.rdbuf(); std::string str = ss.str(); //解析 rapidjson::Document doc; if (doc.Parse(str.c_str()).HasParseError()) std::cout<<std::endl<<"parse Failed"<<std::endl; rapidjson::Document::AllocatorType&allocator = doc.GetAllocator(); // 获取最初数据的分配器 //增加元素 doc["file"].AddMember("key2","value2",allocator); //删除元素 doc["file"].RemoveMember("key"); //修改值 doc["file"]["key2"].SetString("newValue"); //数组操作// rapidjson::Value& array = doc["file"]["array"];//获取数组对象 //添加数组对象 rapidjson::Value item(rapidjson::kObjectType); //创建数组里面对象 item.AddMember("key20","value20",allocator); item.AddMember("key21","value21",allocator); array.PushBack(item,allocator); //读取数组元素 if(array[2].HasMember("key20"))//查找是否存在 std::cout<<std::endl<<array[2]["key20"].GetString()<<std::endl; //删除数组最后一个元素 array.PopBack(); //输出 rapidjson::StringBuffer buffer; rapidjson::Writer< rapidjson::StringBuffer > writer(buffer); doc.Accept(writer); std::string out = buffer.GetString(); std::cout<<std::endl<<out<<std::endl; }
jsoncpp语法:
#include <iostream> #include <fstream> #include <jsoncpp/jsoncpp.h> int main() { //读取文件 std::fstream fs("file.json"); if(!fs) std::cout<<std::endl<<"file open Failed"<<std::endl; //解析 Json::Reader reader; Json::Value root; if(!reader.parse(fs,root)) std::cout<<std::endl<<"parse Failed"<<std::endl; //修改元素值 root["file"]["key"] = Json::Value("1"); //删除元素 root["file"].removeMember("key"); //添加元素 root["file"]["key2"] = Json::Value("value2"); //数组操作 Json::Value& array = root["file"]["array"]; //获取数组 //删除,读取数组元素 for(int i = 0; i < array.size(); i++) { if(array[i].isMember("key00")) array[i].removeMember("key00"); if(!array[i].isMember("key01")) continue; std::string out = array[i]["key01"].asString(); std::cout<<std::endl<<"key01: "<<out<<std::endl; } //插入数组元素 Json::Value item(Json::objectValue); item["key20"] = Json::Value("value20"); item["key21"] = Json::Value("value21"); array.append(item); //输出 std::string out = root.toStyledString(); std::cout<<std::endl<<out<<std::endl; }