Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 更快的JsonCpp替代方案,允许Json对象的复制/可变性?_C++_Json_C++11_Jsoncpp_Rapidjson - Fatal编程技术网

C++ 更快的JsonCpp替代方案,允许Json对象的复制/可变性?

C++ 更快的JsonCpp替代方案,允许Json对象的复制/可变性?,c++,json,c++11,jsoncpp,rapidjson,C++,Json,C++11,Jsoncpp,Rapidjson,JsonCpp速度很慢。代码很混乱 是否有其他更快、更清洁、支持以下内容的替代方案: Json::Value val, copy; val["newMember"] = 100; val["newMember2"] = "hello"; copy = val; val["newMember2"] = "bye"; assert(val["newMember"] == copy["newMember"]); assert(val["newMember2"] != copy["newMember2"

JsonCpp速度很慢。代码很混乱

是否有其他更快、更清洁、支持以下内容的替代方案:

Json::Value val, copy;
val["newMember"] = 100;
val["newMember2"] = "hello";
copy = val;
val["newMember2"] = "bye";
assert(val["newMember"] == copy["newMember"]);
assert(val["newMember2"] != copy["newMember2"]);
JsonCpp支持上面的代码

我尝试了rapidjson,它非常快,但不幸的是它不支持复制Json值


还有别的选择吗?基准测试的额外好处。

在搜索文档一段时间后,我终于找到了一种使用rapidjson wich复制JSON对象的好方法,非常方便:

rapidjson::Document doc; // This is the base document that you got from parsing etc
rapidjson::Value& v = doc["newMember"]; // newMember = 100

assert(v.GetInt() == 100);

rapidjson::Document copy;
doc.Accept(copy); // The accept meachnism is the same as used in parsing, but for copying

assert(copy["newMember"].GetInt() == doc["newMember"].GetInt())

显式复制有一个优点:它迫使您清楚地考虑何时使用引用或可能不必要的副本。

在搜索文档一段时间后,我终于找到了一种使用rapidjson wich复制JSON对象的好方法,非常方便:

rapidjson::Document doc; // This is the base document that you got from parsing etc
rapidjson::Value& v = doc["newMember"]; // newMember = 100

assert(v.GetInt() == 100);

rapidjson::Document copy;
doc.Accept(copy); // The accept meachnism is the same as used in parsing, but for copying

assert(copy["newMember"].GetInt() == doc["newMember"].GetInt())

显式复制有一个优点:它强迫你清楚地思考何时使用引用或潜在的不必要的拷贝。< /P>你想存储JSON还是DO可以将JSON文本翻译成C++结构?这对你有用吗?@ Lokistali我想存储JSON对象,比如JSONCPP,你可以看看C++ API吗?这是Objective-CAPI的核心。它可以使用标准容器生成表示,并且基本上支持您请求的语法。它也相当快,与Rabijjon相当。你想存储JSON还是DO可以将JSON文本翻译成C++结构。这对你有用吗?@ Lokistali我想存储JSON对象,比如JSONCPP,你可以看看C++ API API,这是它的Objule-C API的核心。它可以使用标准容器生成表示,并且基本上支持您请求的语法。它的速度也相当快——与rapidjson相当。它在编译时会引发大量C2248错误,Accept函数中的许多元素都会发出相同的消息:无法访问在类“rapidjson::GenericDocument”中声明的私有成员。我正在副本构造函数中使用doc.Acceptother.doc。您知道如何解决这个问题吗?最近,一篇文章为rapidjson添加了深度复制API。它在编译时引发了许多C2248错误,Accept函数中的许多元素都表示相同的消息:无法访问在类“rapidjson::GenericDocument”中声明的私有成员。我正在副本构造函数中使用doc.Acceptother.doc。您知道如何解决这个问题吗?最近,一篇文章为rapidjson添加了深度复制API。