property_tree получить значение массива в виде строки - PullRequest
0 голосов
/ 29 октября 2019

Я хочу проанализировать файл / строку json с помощью Boost property_tree, но вместо того, чтобы поддеревья были проанализированы в массиве, я бы хотел, чтобы он оставался строкой для использования в другой существующей функции, которая работает только с json-Strings.

Надеюсь, достаточно следующего примера:


example.json

{
    "type": "myType",
    "colors": {
        "color0":"red",
        "color1":"green",
        "color2":"blue"
    }
}

main.cpp

std::stringstream ss("example.json");
ptree pt;
read_json(ss, pt);

std::string sType = pt.get("type", "");
std::string sColors = pt.get<std::string>("colors");

std::cout << "sType: " << sType << std::endl; // sType: myType
std::cout << "sColors: " << sColors << std::endl; // sColors: {"color0":"red", "color1":"green", "color2":"blue"}

Я пробовал несколько функций, например, pt.get_child("colors") просто вернул бы другое ptree, а pt.get_value<std::string>("colors") вернуло бы пустую строку ("").

. Желаемый результат выглядел бы так:

sColors: {"color0":"red", "color1":"green", "color2":"blue"}

или

sColors: {\"color0\":\"red\", \"color1\":\"green\", \"color2\":\"blue\"}

Есть ли способ получить желаемый результат для sColors?

1 Ответ

0 голосов
/ 29 октября 2019

Я нашел возможное решение быстрее, чем ожидалось, следующий код даст удовлетворительный ответ:

std::stringstream os;
write_json(os, pt.get_child("colors"), false);
std::string sColors = os.str();
std::cout << "sColors: " << sColors << std::endl;

Если есть более элегантное решение, не стесняйтесь также опубликовать его!

...