相关文章推荐
发呆的洋葱  ·  Elasticsearch Service ...·  1 年前    · 
淡定的橙子  ·  在CentOS ...·  1 年前    · 
# 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 ) ; 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);
			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;

如果,不进行元素判断,当元素不存在时,会出现如下错误:
在这里插入图片描述

// 请自己下载开源的rapidjson #include rapidjson/prettywriter.h #include rapidjson/rapidjson.h #include rapidjson/document.h #include rapidjson/stringbuffer.h #include rapidjson/writer.h #include rapidjson/memorystr
#include &lt;rapidjson/document.h&gt; #include &lt;rapidjson/stringbuffer.h&gt; #include &lt;rapidjson/pointer.h&gt; #include &lt;rapidjson/writer.h&gt; #include &lt;rapidjson/prettywriter.h&gt; #incl...
首先,json(JavaScript objection notation)是一种轻量级的数据交换格式,正是由于其轻量的这个特点,经常替代程序的变量、对象,被用作程序之间数据传输的格式。 rapidjson?是不是听起来很耳熟,想到了java使用的fastjson这个依赖,fastjson用来进行java对象和json数据格式之间的转换,一个rapid一个fast哈哈哈,知道你们都是轻量级的了。 rapidjson一个应用在C++程序json的生成器和解析器。 相较于jsoncpp,rapid
为什么要学习解析Json文件? 工作需要呗! 最近在工作项目,有需求是需要进行解析Json字符串的,但是我只会使用QT去解析Json,且主管规定要使用C/C++语言去解析,说是为了方便移植到其他项目进行使用… 没办法,只能硬着头皮,在网上找找有没有什么解析Json的开源是C/C++可以使用的。 找了许多,网上也提供了许多,最终我选择了cJOSN,不为什么,就是因为它小巧玲珑,且是纯C的! 花了一两周的悠闲时间去学习,把一些比较常用的解析的JSON字符串解析解析记录下来! 最后简单介绍一下json是什么
rapidjson文使用手册 rapidjson的基本介绍、使用好处、解析速度等不在此篇讲述,因为在官网上已经讲得非常详细了,这里写的都是本人拙劣的见解,如有不足之处,烦请各位指出。 本文结构: 1、基本单元; 1、基本单元 rapidjson的基本操作单元:Document以及Value 例:当有一个json案例,请让我们称之为te...
利用rapidjson实现未知json数据的解析,拿到每一个key和value,用vs2010实现。 引用头文件 #include "rapidjson/document.h" #include using namespace std; string strJsonTest = "{\"item_1\":\"value_1\",\"item_2\":\"value_2\"
cJSON* xjson = cJSON_CreateObject(); cJSON_AddItemToObject(xjson, "a", cJSON_CreateString("aaa")); cJSON_AddItemToObject(xjson, "b", cJSON_CreateNumber(1)); char *buf1 = cJSON_Print(xjson); printf("%s\n",buf1 ); //{"a":1,"b":"aaa"}
rapidjson是一个高效的C++ JSON解析/生成器,具有小而全、快且独立等优点,具体用法如下 1、基本单元 rapidjson的基本操作单元:Document以及Value 例:当有一个json案例,请让我们称之为test.json "test_int": 100, "test_float": 100.9, "test_string": "asd", "test_float_array": [], "test_object": { "vec_key": [9, 3, 5, 7, 2
rapidjson为了最大化性能,大量使用了浅拷贝,使用之前一定要了解清楚。 如果采用了浅拷贝,特别要注意局部对象的使用,以防止对象已被析构了,却还在被使用。 输出rapidjson解析错误信息 #include "rapidjson/document.h" #include...
RapidJSON是一个 C++JSON 解析器及生成器。它的灵感来自 RapidXml。 RapidJSON 小而全。它同时支持 SAX 和 DOM 风格的 API。SAX 解析器只有约 500 行代码。 RapidJSON 快。它的性能可与 strlen() 相比。可支持 SSE2/SSE4.2 加速。 RapidJSON 独立。它不依赖于 BOOST 等外部。它甚至不依赖于 STL。 RapidJSON 对内存友好。在大部分 32/64 位机器上,每个 JSON 只占 16 字节(除字符串
#include "rapidjson/document.h" #include "rapidjson/writer.h" #include "rapidjson/stringbuffer.h" using namespace rapidjson; int main() { // 构造 JSON 文档 Document doc(kObjectType); doc.SetArray(); // 添加两个对象到数组 for (int i = 0; i < 2; ++i) { Value obj(kObjectType); obj.AddMember("name", "Alice", doc.GetAllocator()); obj.AddMember("age", 20 + i, doc.GetAllocator()); doc.PushBack(obj, doc.GetAllocator()); // 将 JSON 文档序列化为字符串 StringBuffer buffer; Writer<StringBuffer> writer(buffer); doc.Accept(writer); // 输出 JSON 字符串 std::cout << buffer.GetString() << std::endl; return 0; 输出结果为: ```json [{"name":"Alice","age":20},{"name":"Alice","age":21}] 在上述代码,我们首先构造了一个空的 JSON 文档,并将其设置为数组类型。然后,我们添加了两个对象到数组,每个对象包含了两个属性:`name` 和 `age`。最后,我们使用 `Writer` 类将 JSON 文档序列化为字符串,并输出该字符串。