boost ptree: массив JSON сериализуется как нестроковый, используя специальный переводчик
Я реализую пользовательский переводчик для boost ptree для обработки добавления std::vector к нему. Код:
template <typename TExternal>
struct translator_t
{
using internal_type = std::string;
using external_type = TExternal;
boost::optional<external_type> get_value(const internal_type& str)
{
// some code
}
boost::optional<internal_type> put_value(const external_type& obj)
{
std::stringstream ss;
ss << "[";
ss << "1, 2, 3";
ss << "]";
return boost::make_optional(ss.good(), ss.str());
}
};
Позже, когда я использую свой translationator_t (в boost::static_visitor):
struct add_to_node_visitor : boost::static_visitor<boost::property_tree::ptree>
{
template <typename Primitive>
boost::property_tree::ptree operator()(const Primitive& v) const
{
details::translator_t<Primitive> tr{};
boost::property_tree::ptree node;
node.put("coordinates", v, tr);
return node;
}
};
узел добавляется как строка, потому что internal_type это std:: string и переносится в "". Позже, когда я использую write_json(...) для сериализации ptree, я получаю JSON со следующим:
"coordinates" : "[1, 2, 3]"
Но перенос массива JSON на "" неверен и должен быть:
"coordinates" : [1, 2, 3]
Вопрос: возможно ли реализовать переводчик или сделать ptree, чтобы избежать переноса строки с кавычками?