C++ 更快的JsonCpp替代方案,允许Json对象的复制/可变性?
JsonCpp速度很慢。代码很混乱 是否有其他更快、更清洁、支持以下内容的替代方案: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"
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。