2013-07-06 2 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 Я хочу хранить объекты JSON, такие как jsoncpp, –

ответ

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», из множества элементов внутри функции «Принять» указано все одно и то же сообщение: 'не может получить доступ к закрытому члену, объявленному в классе 'quickjson :: GenericDocument ''. Я использую 'doc.Accept (other.doc)' в конструкторе копирования. Вы знаете, как это решить? – SysDragon

+0

В последнее время вклад добавляет API для глубокого копирования в quickjson. https://github.com/miloyip/rapidjson/pull/20 –