项目中需要将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;
- }