Неправильное поведение свойства Boost write_json

Я кодирую оболочку JSON для дерева свойств Boost. В настоящее время основное внимание уделяется записи полученного JSON в строку или файл.

Используя boost :: property_tree :: json_parser :: write_json (ss, * pt), результирующее дерево свойств записывается в строку.

Но этот метод не понимает, что такое истина, ложь, ноль или число. Все преобразуется в строку.

Чтение документации Boost - это ограничение библиотеки. Есть ли способ изменить это поведение?


person mariolpantunes    schedule 19.11.2012    source источник
comment
Дублировать, как упоминалось в первом ответе .... хотя было бы неплохо иметь первый ответ в том же месте.   -  person moodboom    schedule 21.11.2013


Ответы (1)


Ссылка В этой ссылке есть исправление проблемы.

Это связано с изменением кода ускорения, поэтому я попробовал другую альтернативу. Мое решение включает регулярные выражения:

std::string JSONObject::toString() const
{
    boost::regex exp("\"(null|true|false|[0-9]+(\\.[0-9]+)?)\"");
    std::stringstream ss;
    boost::property_tree::json_parser::write_json(ss, *pt);
    std::string rv = boost::regex_replace(ss.str(), exp, "$1");

    return rv;
}

В основном я ищу ключевые слова: true, false, null и любые числа. Спички заменяются такими же без кавычек.

person mariolpantunes    schedule 20.11.2012
comment
и вы перемещаете ограничение, так что если я хочу иметь строку только с числами или true / false / null в качестве строки - я не могу этого иметь :-), однако все лучше, чем изменение кода ускорения, я полагаю. - person Alex Kremer; 26.07.2013
comment
Спасибо, это регулярное выражение избавило меня от головной боли. Хотя в данный момент это не удается с отрицательными числами. Я также изменил его для работы с отрицательными числами: "\"(null|true|false|-?[0-9]+(\\.[0-9]+)?)\"" - person user2460318; 27.03.2017