Функция набора Poco::JSON::Object::Ptr не работает на 1.6.1

У меня есть кусок кода следующим образом:

Poco::JSON::Parser a;
Poco::Dynamic::Var v = a.parse(str); //str is a json string
Poco::JSON::Object::Ptr p = v.extract<Poco::JSON::Object::Ptr>();
p->set("key","value");

в Poco v 1.6.0 это работает совершенно нормально, и содержимое v изменяется в соответствии с функцией set, но в 1.6.1 это больше не работает, есть ли разница в вызове функции set между 1.6.0 и 1.6. 1? Или в чем может быть потенциальная проблема? (Мое текущее наблюдение состоит в том, что в 1.6.1 заданная строка вообще не выполняется.)

Спасибо за чтение этого.

Примечание. Если есть какие-либо обходные пути, которые могут достичь того же эффекта, но не должны использовать функцию set, я буду признателен.


person JLTChiu    schedule 12.05.2016    source источник


Ответы (1)


Вот сегодня я узнал ответ и решил поделиться с людьми.

Ответ: функция set() Poco::JSON::Object отличается в версиях 1.6.0 и 1.6.1. В 1.6.1 он не будет работать, если для этой клавиши уже назначено значение, а в 1.6.0 он просто перезапишет его. Очень простой обходной путь для 1.6.1: вы можете сначала выполнить функцию remove(), а затем выполнить функцию set(), после чего она будет работать так же. Но да, реализация другая и ее можно проверить в исходном коде библиотеки Poco.

person JLTChiu    schedule 14.05.2016