💖 前言
基于RapidJson库修改json中指定元素的值。
💖 方式1
示例代码如下:
#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <string>
using namespace std;
using namespace rapidjson;
//修改一个已有的字符串
void fun01()
{
//1.把JSON解析至DOM
string strJson = "{\"name1\":\"张三\",\"gender\":\"男\",\"age\":20}";
Document doc;
doc.Parse(strJson.c_str());
Document::AllocatorType & allocator = doc.GetAllocator();//生成一个分配器
std::cout << "修改前:" << strJson << endl;
//2.利用DOM作出修改
if (doc.HasMember("name")) //如果成员存在,则修改
{
Value& name = doc["name"];
name = "李四";
}
else //如果成员不存在,则新增
{
doc.AddMember("name", "赵六", allocator);
}
if (doc.HasMember("age")) //如果成员存在
{
Value& age = doc["age"];
age.SetInt(age.GetInt() + 5);
}
else
{
doc.AddMember("age", 30, allocator);
}
//3.将DOM stringfy 为json
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
doc.Accept(writer);
string str = buffer.GetString();
std::cout << "修改后:" << str << endl;
}
int main()
{
fun01();
system("pause");
return 0;
}
💖 方式2
示例代码如下:
#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"
#include <string>
/*
C++ 基于RapidJson库修改json中指定元素的值
*/
using namespace std;
using namespace rapidjson;
void fun02()
{
string strJson = "{\"name\":\"张三\",\"gender\":\"男\",\"age1\":20}";
std::cout << "修改前:" << strJson << endl;
Document doc;
doc.SetObject();
Document::AllocatorType & allocator = doc.GetAllocator();//生成一个分配器
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
if (!doc.Parse(strJson.c_str()).HasParseError())//通过HasParseError来判断解析是否成功
{
if (doc.HasMember("name")) //如果成员存在,则修改
{
doc["name"].SetString("赵六");
}
else //如果成员不存在,则新增
{
doc.AddMember("name", "赵六",allocator);
}
if (doc.HasMember("age")) //如果成员存在
{
doc["age"].SetInt(30);
}
else
{
doc.AddMember("age", 30, allocator);
}
}
doc.Accept(writer);
string str = buffer.GetString();
std::cout << "修改后:" << str << endl;
}
int main(int argv, char *argc[])
{
fun02();
system("pause");
return 0;
}
如果,不进行元素判断,当元素不存在时,会出现如下错误: