Было бы замечательно иметь возможность указать путь в Boost.PropertyTree, содержащем массив.
Я могу создать Boost.PropertyTree из этого JSON:
const char* theJSONTestText = R"FooArrayTest({
"FooArray": [
{"BarIntValue": 10, "BarString": "some string"},
{"BarIntValue": 99, "BarString": "another string"},
{"BarIntValue": 45, "BarString": "a third string"}
]
})FooArrayTest";
Который построен и печатается, как и ожидалось:
FooArray:
:
BarIntValue: 10
BarString: some string
:
BarIntValue: 99
BarString: another string
:
BarIntValue: 45
BarString: a third string
Конечно, отдельные элементы массива не имеют имен.
Я знаю, КАК перебирать свойство FooArray, но было бы особенно удобно иметь возможность доступа к отдельным элементам через путь точечной нотации JSON, например, "FooArray [2] .BarString", для доступа к полю в третьей элемент массива:
std::string theSecondBarString = theParsedTree.get<std::string>("FooArray[2].BarString");
Конечно, это вызывает исключение, потому что я предполагаю, что Boost.PropertyTree не знает, как обрабатывать путь со спецификатором массива? Или у меня неверный синтаксис?
ПОЧЕМУ Я ХОЧУ ДЕЛАТЬ ЭТОТ ПУТЬ?
Я хочу, чтобы клиент этого PropertyTree мог не только получать данные из определенного элемента массива, но также и SET (т.е. изменять) данные определенного элемента массива. Если нет прямой записи пути, тогда клиент должен использовать мои изобретенные API-функции, чтобы сначала извлечь, а затем получить доступ к нужному полю, и наоборот, чтобы выписать его обратно. Это может быть утомительно и подвержено ошибкам для узлов дерева, которые содержат элементы массива в элементах массива.