2013-07-06 55 views
2

JsonCpp很慢。代碼非常混亂。更快的JsonCpp替代方案,允許Json對象的複製/可變性?

是否有任何替代方案,是更快,更清潔和支持這樣的東西:

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值。

還可以嗎?基準獎勵積分。

+0

是否要存儲JSON或者可以將JSON文本轉換爲C++結構。 –

+0

這會爲你工作:http://pastebin.com/LwH92T3w –

+0

@LokiAstari我想存儲像jsoncpp這樣的JSON對象嗎 –

回答

4

搜索了一段時間後,「文檔」我終於找到了JSON對象與rapidjson至極複製一個好方法是很方便的:

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()) 

顯式的複製有一個好處:它迫使你想清楚關於何時使用引用或可能不必要的副本。

+0

它在編譯時引發了很多'C2248'錯誤,'Accept'函數中的很多元素表示所有相同的消息:'無法訪問類'rapidjson :: GenericDocument '中聲明的私有成員。我在拷貝構造函數中使用'doc.Accept(other.doc)'。你知道如何解決這個問題嗎? – SysDragon

+0

最近,一項貢獻向rapidjson添加了深度複製API。 https://github.com/miloyip/rapidjson/pull/20 –

相關問題