问题
JsonCpp is slow. And the code is pretty messy.
Is there any alternative that is faster, cleaner and supports stuff like:
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 supports code like the one above.
I've tried rapidjson, which is very fast, but unfortunately it does not support copying Json values.
Any alternative? Bonus point for benchmarks.
回答1:
After searching for some time the "documentation" I finally found a good way to copy JSON objects with rapidjson wich is very convenient:
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())
The explicit copying has one advantage: It forces you to think clearly about when you are using references or potentially unnecessary copies.
来源:https://stackoverflow.com/questions/17498812/faster-jsoncpp-alternative-that-allows-copying-mutability-of-json-objects