rapidJson的使用
写Json:创建一个简单的json结构
方式一:使用rapidjson
#define JSON_KEY_NAME_CONTENT "body"
#define JSON_KEY_NAME_DATATYPE "type"
#define JSON_KEY_REPORT_NAME_ACTIONRESULT "ActionRes"
#define JSON_DATA_TYPE_WEAK_PASSWORD_OPTION_CHANGE "reportWeakPasswordOptionChange"
rapidjson::StringBuffer reportBuff;
rapidjson::Writer<rapidjson::StringBuffer> reportwriter(reportBuff);
reportwriter.StartObject();
reportwriter.Key(JSON_KEY_NAME_CONTENT);
reportwriter.StartArray();
reportwriter.StartObject();
reportwriter.Key(JSON_KEY_REPORT_NAME_ACTIONRESULT);
reportwriter.Int(ret);
reportwriter.EndObject();
reportwriter.EndArray();
reportwriter.Key(JSON_KEY_NAME_DATATYPE);
reportwriter.String(JSON_DATA_TYPE_WEAK_PASSWORD_OPTION_CHANGE);
reportwriter.EndObject();
std::string jsonstring = reportBuff.GetString()//改部分是将json转换为char *;
最后构建的结果
一个jsonobject中有两个对象,body为数组,type为string。
注意StartObject和EndObject,以及StartArray和EndArray需要成对出现。
方式二:使用AddMember增加元素
rapidjson::Document jsonDoc; //生成一个dom元素Document
rapidjson::Document::AllocatorType &allocator = jsonDoc.GetAllocator(); //获取分配器
jsonDoc.SetObject(); //将当前的Document设置为一个object,也就是说,整个Document是一个Object类型的dom元素
jsonDoc.AddMember("ReplyTo", rapidjson::StringRef("test string"), allocator);
jsonDoc.AddMember("Body", rapidjson::StringRef(""), allocator);
int s = 10;
jsonDoc.AddMember("Score",s,allocator);
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
jsonDoc.Accept(writer);
std::string data = std::string(strBuf.GetString());
这是从别的地方抄过来的一个例子,用来添加数组
rapidjson::Value object(rapidjson::kObjectType); // 创建对象
bject.AddMember("int", 1, allocator); // 添加 "int" : 1
object.AddMember("double", 1.1, allocator); // 添加 "double" : 1.1
object.AddMember("hello", "world", allocator); // 添加 "hello" : "world"
//[4.2] 往json数组中添加数据:值
rapidjson::Value array(rapidjson::kArrayType); // 创建数组
rapidjson::Value str(rapidjson::kStringType); // 字符串
rapidjson::Value obj(rapidjson::kObjectType); // 对象
str.SetString("hello"); // 设置str的值
obj.AddMember("name", "alice", allocator);
obj.AddMember("age", 23, allocator);
array.PushBack(123, allocator); // 添加数字
array.PushBack("888", allocator); // 添加字符串,方式一
array.PushBack(str, allocator); // 添加字符串,方式二
array.PushBack(obj, allocator); // 添加对象
//[4.3] 往对象格式的json文件中添加数据
d.AddMember("hello", "world", allocator);
d.AddMember("object", object, allocator);
d.AddMember("array", array, allocator);
读Json
Json数据格式
数据分析:moudleList是一个json数组,其中有四个object,每个object中有两个元素
void HandleJsonData(std::string &data){
std::string stringType = "";
rapidjson::Document doc;
doc.Parse(data.c_str());
if (doc.HasParseError())
{
int ret1 = doc.HasParseError();
return false;
}
rapidjson::Value &module = doc["moudleList"];
if (module.IsArray())
{
for (int i =0;i<module.Size();i++)
{
rapidjson::Value &reportdata = module[i]["reportData"];
if (reportdata.IsArray())
{
std::string tmp = reportdata[0].GetString();
rapidjson::Document datajson;
if (datajson.Parse(tmp.c_str()).HasParseError())
{
locallog.WriteLogAndConsole(LOG_DEBUG,"[%s] doc parse error \r\n",__FUNCTION__);
return false;
}
if(doc.HasMember("type")){
stringType = doc["type"].GetString();
}else{
return false;
}
rapidjson::Value &body = doc["body"];
if (body.IsArray())
{
body[0]["ActionRes"].GetInt();
}
}
}
}
参考文章:
1、Json数据操作
来源:CSDN
作者:玲珑争
链接:https://blog.csdn.net/sinat_38602176/article/details/104040421