Question

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.

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top