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, чтобы избежать переноса строки с кавычками?

0 ответов

Другие вопросы по тегам